<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Distributed computing</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Distributed_computing"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Distributed_computing rootpage-Distributed_computing skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Distributed computing</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">Not to be confused with <a href="Decentralized_computing" title="Decentralized computing">Decentralized computing</a>.</div>
<p><b>Distributed computing</b> is a field of <a href="Computer_science" title="Computer science">computer science</a> that studies <b>distributed systems</b>, defined as <a href="Computer_system" class="mw-redirect" title="Computer system">computer systems</a> whose inter-communicating components are located on different <a href="Computer_network" title="Computer network">networked computers</a>.<sup id="cite_ref-tanenbaum_1-0" class="reference"><a href="#cite_note-tanenbaum-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-Distributed_Programs_2010_pp._373–406_2-0" class="reference"><a href="#cite_note-Distributed_Programs_2010_pp._373–406-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p><p>The components of a distributed system communicate and coordinate their actions by <a href="Message_passing" title="Message passing">passing messages</a> to one another in order to achieve a common goal. Three significant challenges of distributed systems are: maintaining <a href="Concurrency_(computer_science)" title="Concurrency (computer science)">concurrency</a> of components, overcoming the <a href="Clock_synchronization" title="Clock synchronization">lack of a global clock</a>, and managing the independent failure of components.<sup id="cite_ref-tanenbaum_1-1" class="reference"><a href="#cite_note-tanenbaum-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> When a component of one system fails, the entire system does not fail.<sup id="cite_ref-FOOTNOTEDusseauDusseau20161–2_3-0" class="reference"><a href="#cite_note-FOOTNOTEDusseauDusseau20161–2-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> Examples of distributed systems vary from <a href="Service-oriented_architecture" title="Service-oriented architecture">SOA-based systems</a> to <a href="Microservices" title="Microservices">microservices</a> to <a href="Massively_multiplayer_online_game" title="Massively multiplayer online game">massively multiplayer online games</a> to <a href="Peer-to-peer" title="Peer-to-peer">peer-to-peer applications</a>. Distributed systems cost significantly more than monolithic architectures, primarily due to increased needs for additional hardware, servers, gateways, firewalls, new subnets, proxies, and so on.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> Also, distributed systems are prone to <a href="Fallacies_of_distributed_computing" title="Fallacies of distributed computing">fallacies of distributed computing</a>. On the other hand, a well designed distributed system is more scalable, more durable, more changeable and more fine-tuned than a <a href="Monolithic_application" title="Monolithic application">monolithic application</a> deployed on a single machine.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> According to Marc Brooker: "a system is scalable in the range where <a href="Marginal_cost" title="Marginal cost">marginal cost</a> of additional workload is nearly constant." <a href="Serverless_computing" title="Serverless computing">Serverless</a> technologies fit this definition but the total cost of ownership, and not just the infra cost must be considered.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>
</p><p>A <a href="Computer_program" title="Computer program">computer program</a> that runs within a distributed system is called a <b>distributed program</b>,<sup id="cite_ref-Distributed_Programs_2010_pp._373–406_II_7-0" class="reference"><a href="#cite_note-Distributed_Programs_2010_pp._373–406_II-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> and <i>distributed programming</i> is the process of writing such programs.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> There are many different types of implementations for the message passing mechanism, including pure HTTP, <a href="Remote_procedure_call" title="Remote procedure call">RPC-like</a> connectors and <a href="Message-oriented_middleware" title="Message-oriented middleware">message queues</a>.<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup>
</p><p><i>Distributed computing</i> also refers to the use of distributed systems to solve computational problems. In <i>distributed computing</i>, a problem is divided into many tasks, each of which is solved by one or more computers,<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup> which communicate with each other via message passing.<sup id="cite_ref-Andrews_2000_11-0" class="reference"><a href="#cite_note-Andrews_2000-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup>
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Introduction">Introduction</h2></div>
<p>The word <i>distributed</i> in terms such as "distributed system", "distributed programming", and "<a href="Distributed_algorithm" title="Distributed algorithm">distributed algorithm</a>" originally referred to computer networks where individual computers were physically distributed within some geographical area.<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> The terms are nowadays used in a much wider sense, even referring to autonomous <a href="Process_(computing)" title="Process (computing)">processes</a> that run on the same physical computer and interact with each other by message passing.<sup id="cite_ref-Andrews_2000_11-1" class="reference"><a href="#cite_note-Andrews_2000-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup>
</p><p>While there is no single definition of a distributed system,<sup id="cite_ref-harvtxt|Ghosh|2007_13-0" class="reference"><a href="#cite_note-harvtxt|Ghosh|2007-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> the following defining properties are commonly used as:
</p>
<ul><li>There are several autonomous computational entities (<i>computers</i> or <i><a href="Node_(networking)" title="Node (networking)">nodes</a></i>), each of which has its own local <a href="Memory_(computers)" class="mw-redirect" title="Memory (computers)">memory</a>.<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup></li>
<li>The entities communicate with each other by <a href="Message_passing" title="Message passing">message passing</a>.<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup></li></ul>
<p>A distributed system may have a common goal, such as solving a large computational problem;<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup> the user then perceives the collection of autonomous processors as a unit. Alternatively, each computer may have its own user with individual needs, and the purpose of the distributed system is to coordinate the use of shared resources or provide communication services to the users.<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup>
</p><p>Other typical properties of distributed systems include the following:
</p>
<ul><li>The system has to <a href="Fault_tolerance" title="Fault tolerance">tolerate failures</a> in individual computers.<sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup></li>
<li>The structure of the system (network topology, network latency, number of computers) is not known in advance, the system may consist of different kinds of computers and network links, and the system may change during the execution of a distributed program.<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup></li>
<li>Each computer has only a limited, incomplete view of the system. Each computer may know only one part of the input.<sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Patterns">Patterns</h2></div>
<p>Here are common <a href="Architectural_patterns" class="mw-redirect" title="Architectural patterns">architectural patterns</a> used for distributed computing:<sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li><a href="Saga_interaction_pattern" class="mw-redirect" title="Saga interaction pattern">Saga interaction pattern</a></li>
<li><a href="Microservices" title="Microservices">Microservices</a></li>
<li><a href="Event_driven_architecture" class="mw-redirect" title="Event driven architecture">Event driven architecture</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Events_vs._Messages">Events vs. Messages</h2></div>
<p>In distributed systems, <a href="Event_(computing)" title="Event (computing)">events</a> represent a fact or state change (e.g., <i>OrderPlaced</i>) and are typically broadcast asynchronously to multiple consumers, promoting loose coupling and scalability. While events generally don’t expect an immediate response, acknowledgment mechanisms are often implemented at the infrastructure level (e.g., Kafka commit offsets, SNS delivery statuses) rather than being an inherent part of the event pattern itself. <sup id="cite_ref-:1_22-0" class="reference"><a href="#cite_note-:1-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-:2_23-0" class="reference"><a href="#cite_note-:2-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup>
</p><p>In contrast, <a href="Message" title="Message">messages</a> serve a broader role, encompassing commands (e.g., <i>ProcessPayment</i>), events (e.g., <i>PaymentProcessed</i>), and documents (e.g., <i>DataPayload</i>). Both events and messages can support various delivery guarantees, including at-least-once, at-most-once, and exactly-once, depending on the technology stack and implementation. However, exactly-once delivery is often achieved through idempotency mechanisms rather than true, infrastructure-level exactly-once semantics. <sup id="cite_ref-:1_22-1" class="reference"><a href="#cite_note-:1-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-:2_23-1" class="reference"><a href="#cite_note-:2-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup>
</p><p>Delivery patterns for both events and messages include publish/subscribe (one-to-many) and point-to-point (one-to-one). While request/reply is technically possible, it is more commonly associated with messaging patterns rather than pure event-driven systems. Events excel at state propagation and decoupled notifications, while messages are better suited for command execution, workflow orchestration, and explicit coordination. <sup id="cite_ref-:1_22-2" class="reference"><a href="#cite_note-:1-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-:2_23-2" class="reference"><a href="#cite_note-:2-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup>
</p><p>Modern architectures commonly combine both approaches, leveraging events for distributed state change notifications and messages for targeted command execution and structured workflows based on specific timing, ordering, and delivery requirements. <sup id="cite_ref-:1_22-3" class="reference"><a href="#cite_note-:1-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-:2_23-3" class="reference"><a href="#cite_note-:2-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Parallel_and_distributed_computing">Parallel and distributed computing</h2></div>
<p>Distributed systems are groups of networked computers which share a common goal for their work.
The terms "<a href="Concurrent_computing" title="Concurrent computing">concurrent computing</a>", "<a href="Parallel_computing" title="Parallel computing">parallel computing</a>", and "distributed computing" have much overlap, and no clear distinction exists between them.<sup id="cite_ref-24" class="reference"><a href="#cite_note-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup> The same system may be characterized both as "parallel" and "distributed"; the processors in a typical distributed system run concurrently in parallel.<sup id="cite_ref-25" class="reference"><a href="#cite_note-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup> Parallel computing may be seen as a particularly tightly coupled form of distributed computing,<sup id="cite_ref-26" class="reference"><a href="#cite_note-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup> and distributed computing may be seen as a loosely coupled form of parallel computing.<sup id="cite_ref-harvtxt|Ghosh|2007_13-1" class="reference"><a href="#cite_note-harvtxt|Ghosh|2007-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> Nevertheless, it is possible to roughly classify concurrent systems as "parallel" or "distributed" using the following criteria:
</p>
<ul><li>In parallel computing, all processors may have access to a <a href="Shared_memory" title="Shared memory">shared memory</a> to exchange information between processors.<sup id="cite_ref-27" class="reference"><a href="#cite_note-27"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup></li>
<li>In distributed computing, each processor has its own private memory (<a href="Distributed_memory" title="Distributed memory">distributed memory</a>). Information is exchanged by passing messages between the processors.<sup id="cite_ref-28" class="reference"><a href="#cite_note-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup></li></ul>
<p>The figure on the right illustrates the difference between distributed and parallel systems. Figure (a) is a schematic view of a typical distributed system; the system is represented as a network topology in which each node is a computer and each line connecting the nodes is a communication link. Figure (b) shows the same distributed system in more detail: each computer has its own local memory, and information can be exchanged only by passing messages from one node to another by using the available communication links. Figure (c) shows a parallel system in which each processor has a direct access to a shared memory.
</p><p>The situation is further complicated by the traditional uses of the terms parallel and distributed <i>algorithm</i> that do not quite match the above definitions of parallel and distributed <i>systems</i> (see <a href="#Theoretical_foundations">below</a> for more detailed discussion). Nevertheless, as a rule of thumb, high-performance parallel computation in a shared-memory multiprocessor uses parallel algorithms while the coordination of a large-scale distributed system uses distributed algorithms.<sup id="cite_ref-BetalebParallel16_29-0" class="reference"><a href="#cite_note-BetalebParallel16-29"><span class="cite-bracket">[</span>29<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="History">History</h2></div>
<p>The use of concurrent processes which communicate through message-passing has its roots in <a href="Operating_system" title="Operating system">operating system</a> architectures studied in the 1960s.<sup id="cite_ref-30" class="reference"><a href="#cite_note-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup> The first widespread distributed systems were <a href="Local-area_networks" class="mw-redirect" title="Local-area networks">local-area networks</a> such as <a href="Ethernet" title="Ethernet">Ethernet</a>, which was invented in the 1970s.<sup id="cite_ref-31" class="reference"><a href="#cite_note-31"><span class="cite-bracket">[</span>31<span class="cite-bracket">]</span></a></sup>
</p><p><a href="ARPANET" title="ARPANET">ARPANET</a>, one of the predecessors of the <a href="Internet" title="Internet">Internet</a>, was introduced in the late 1960s, and ARPANET <a href="E-mail" class="mw-redirect" title="E-mail">e-mail</a> was invented in the early 1970s. E-mail became the most successful application of ARPANET,<sup id="cite_ref-32" class="reference"><a href="#cite_note-32"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup> and it is probably the earliest example of a large-scale <a href="Distributed_application" class="mw-redirect" title="Distributed application">distributed application</a>. In addition to ARPANET (and its successor, the global Internet), other early worldwide computer networks included <a href="Usenet" title="Usenet">Usenet</a> and <a href="FidoNet" title="FidoNet">FidoNet</a> from the 1980s, both of which were used to support distributed discussion systems.<sup id="cite_ref-BanksOnThe12_33-0" class="reference"><a href="#cite_note-BanksOnThe12-33"><span class="cite-bracket">[</span>33<span class="cite-bracket">]</span></a></sup>
</p><p>The study of distributed computing became its own branch of computer science in the late 1970s and early 1980s. The first conference in the field, <a href="Symposium_on_Principles_of_Distributed_Computing" title="Symposium on Principles of Distributed Computing">Symposium on Principles of Distributed Computing</a> (PODC), dates back to 1982, and its counterpart <a href="International_Symposium_on_Distributed_Computing" title="International Symposium on Distributed Computing">International Symposium on Distributed Computing</a> (DISC) was first held in Ottawa in 1985 as the International Workshop on Distributed Algorithms on Graphs.<sup id="cite_ref-TelIntro00_34-0" class="reference"><a href="#cite_note-TelIntro00-34"><span class="cite-bracket">[</span>34<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Architectures">Architectures</h2></div>
<p>Various hardware and software architectures are used for distributed computing. At a lower level, it is necessary to interconnect multiple CPUs with some sort of network, regardless of whether that network is printed onto a circuit board or made up of loosely coupled devices and cables. At a higher level, it is necessary to interconnect <a href="Process_(computing)" title="Process (computing)">processes</a> running on those CPUs with some sort of <a href="Communication_system" class="mw-redirect" title="Communication system">communication system</a>.<sup id="cite_ref-OhlídalEvo06_35-0" class="reference"><a href="#cite_note-OhlídalEvo06-35"><span class="cite-bracket">[</span>35<span class="cite-bracket">]</span></a></sup>
</p><p>Whether these CPUs share resources or not determines a first distinction between three types of architecture:
</p>
<ul><li><a href="Shared-memory_architecture" title="Shared-memory architecture">Shared memory</a></li>
<li><a href="Shared-disk_architecture" title="Shared-disk architecture">Shared disk</a></li>
<li><a href="Shared_nothing" class="mw-redirect" title="Shared nothing">Shared nothing</a>.</li></ul>
<p>Distributed programming typically falls into one of several basic architectures: <a href="Client%E2%80%93server" class="mw-redirect" title="Client–server">client–server</a>, <a href="Three-tier_(computing)" class="mw-redirect" title="Three-tier (computing)">three-tier</a>, <a href="Multitier_architecture" title="Multitier architecture"><i>n</i>-tier</a>, or <a href="Peer-to-peer" title="Peer-to-peer">peer-to-peer</a>; or categories: <a href="Loose_coupling" title="Loose coupling">loose coupling</a>, or <a href="Computer_cluster" title="Computer cluster">tight coupling</a>.<sup id="cite_ref-36" class="reference"><a href="#cite_note-36"><span class="cite-bracket">[</span>36<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li><a href="Client%E2%80%93server" class="mw-redirect" title="Client–server">Client–server</a>: architectures where smart clients contact the server for data then format and display it to the users. Input at the client is committed back to the server when it represents a permanent change.</li>
<li><a href="Three-tier_(computing)" class="mw-redirect" title="Three-tier (computing)">Three-tier</a>: architectures that move the client intelligence to a middle tier so that <a href="Stateless_protocol" title="Stateless protocol">stateless</a> clients can be used. This simplifies application deployment. Most web applications are three-tier.</li>
<li><a href="Multitier_architecture" title="Multitier architecture"><i>n</i>-tier</a>: architectures that refer typically to web applications which further forward their requests to other enterprise services. This type of application is the one most responsible for the success of <a href="Application_server" title="Application server">application servers</a>.</li>
<li><a href="Peer-to-peer" title="Peer-to-peer">Peer-to-peer</a>: architectures where there are no special machines that provide a service or manage the network resources.<sup id="cite_ref-Vigna20150127_37-0" class="reference"><a href="#cite_note-Vigna20150127-37"><span class="cite-bracket">[</span>37<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: 227">: 227 </span></sup> Instead all responsibilities are uniformly divided among all machines, known as peers. Peers can serve both as clients and as servers.<sup id="cite_ref-38" class="reference"><a href="#cite_note-38"><span class="cite-bracket">[</span>38<span class="cite-bracket">]</span></a></sup> Examples of this architecture include <a href="BitTorrent" title="BitTorrent">BitTorrent</a> and the <a href="Bitcoin_network" class="mw-redirect" title="Bitcoin network">bitcoin network</a>.</li></ul>
<p>Another basic aspect of distributed computing architecture is the method of communicating and coordinating work among concurrent processes. Through various message passing protocols, processes may communicate directly with one another, typically in a main/sub relationship. Alternatively, a <a href="Database-centric_architecture" title="Database-centric architecture">"database-centric" architecture</a> can enable distributed computing to be done without any form of direct <a href="Inter-process_communication" title="Inter-process communication">inter-process communication</a>, by utilizing a shared <a href="Database" title="Database">database</a>.<sup id="cite_ref-39" class="reference"><a href="#cite_note-39"><span class="cite-bracket">[</span>39<span class="cite-bracket">]</span></a></sup> Database-centric architecture in particular provides relational processing analytics in a schematic architecture allowing for live environment relay. This enables distributed computing functions both within and beyond the parameters of a networked database.<sup id="cite_ref-40" class="reference"><a href="#cite_note-40"><span class="cite-bracket">[</span>40<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Cell-Based_Architecture">Cell-Based Architecture</h3></div>
<p>Cell-based architecture is a distributed computing approach in which computational resources are organized into self-contained units called cells. Each cell operates independently, processing requests while maintaining scalability, fault isolation, and availability. <sup id="cite_ref-:22_41-0" class="reference"><a href="#cite_note-:22-41"><span class="cite-bracket">[</span>41<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-:3_42-0" class="reference"><a href="#cite_note-:3-42"><span class="cite-bracket">[</span>42<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-:4_43-0" class="reference"><a href="#cite_note-:4-43"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup>
</p><p>A cell typically consists of multiple services or application components and functions as an autonomous unit. Some implementations replicate entire sets of <a href="Microservices" title="Microservices">services</a> across multiple cells, while others partition workloads between cells. In replicated models, requests may be rerouted to an operational cell if another experiences a failure. This design is intended to enhance system resilience by reducing the impact of localized failures. <sup id="cite_ref-:23_44-0" class="reference"><a href="#cite_note-:23-44"><span class="cite-bracket">[</span>44<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-:32_45-0" class="reference"><a href="#cite_note-:32-45"><span class="cite-bracket">[</span>45<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-:42_46-0" class="reference"><a href="#cite_note-:42-46"><span class="cite-bracket">[</span>46<span class="cite-bracket">]</span></a></sup>
</p><p>Some implementations employ <a href="Circuit_breaker_design_pattern" title="Circuit breaker design pattern">circuit breakers</a> within and between cells. Within a cell, circuit breakers may be used to prevent cascading failures among services, while inter-cell circuit breakers can isolate failing cells and redirect traffic to those that remain operational. <sup id="cite_ref-:24_47-0" class="reference"><a href="#cite_note-:24-47"><span class="cite-bracket">[</span>47<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-:33_48-0" class="reference"><a href="#cite_note-:33-48"><span class="cite-bracket">[</span>48<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-:43_49-0" class="reference"><a href="#cite_note-:43-49"><span class="cite-bracket">[</span>49<span class="cite-bracket">]</span></a></sup>
</p><p>Cell-based architecture has been adopted in some large-scale distributed systems, particularly in cloud-native and high-availability environments, where fault isolation and redundancy are key design considerations. Its implementation varies depending on system requirements, infrastructure constraints, and operational objectives. <sup id="cite_ref-:25_50-0" class="reference"><a href="#cite_note-:25-50"><span class="cite-bracket">[</span>50<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-:34_51-0" class="reference"><a href="#cite_note-:34-51"><span class="cite-bracket">[</span>51<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-:44_52-0" class="reference"><a href="#cite_note-:44-52"><span class="cite-bracket">[</span>52<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Applications">Applications</h2></div>
<p>Reasons for using distributed systems and distributed computing may include:
</p>
<ul><li>The very nature of an application may <i>require</i> the use of a communication network that connects several computers: for example, data produced in one physical location and required in another location.</li>
<li>There are many cases in which the use of a single computer would be possible in principle, but the use of a distributed system is <i>beneficial</i> for practical reasons. For example:
<ul><li>It can allow for much larger storage and memory, faster compute, and higher bandwidth than a single machine.</li>
<li>It can provide more reliability than a non-distributed system, as there is no <a href="Single_point_of_failure" title="Single point of failure">single point of failure</a>. Moreover, a distributed system may be easier to expand and manage than a monolithic uniprocessor system.<sup id="cite_ref-53" class="reference"><a href="#cite_note-53"><span class="cite-bracket">[</span>53<span class="cite-bracket">]</span></a></sup></li>
<li>It may be more cost-efficient to obtain the desired level of performance by using a <a href="Cluster_(computing)" class="mw-redirect" title="Cluster (computing)">cluster</a> of several low-end computers, in comparison with a single high-end computer.</li></ul></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Examples">Examples</h2></div>
<p>Examples of distributed systems and applications of distributed computing include the following:<sup id="cite_ref-54" class="reference"><a href="#cite_note-54"><span class="cite-bracket">[</span>54<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li><a href="Telecommunications" title="Telecommunications">telecommunications</a> networks:
<ul><li><a href="Telephone_network" title="Telephone network">telephone networks</a> and <a href="Cellular_network" title="Cellular network">cellular networks</a>,</li>
<li><a href="Computer_network" title="Computer network">computer networks</a> such as the <a href="Internet" title="Internet">Internet</a>,</li>
<li><a href="Wireless_sensor_network" title="Wireless sensor network">wireless sensor networks</a>,</li>
<li><a href="Routing_algorithm" class="mw-redirect" title="Routing algorithm">routing algorithms</a>;</li></ul></li>
<li>network applications:
<ul><li><a href="World_Wide_Web" title="World Wide Web">World Wide Web</a> and <a href="Peer-to-peer_network" class="mw-redirect" title="Peer-to-peer network">peer-to-peer networks</a>,</li>
<li><a href="Massively_multiplayer_online_game" title="Massively multiplayer online game">massively multiplayer online games</a> and <a href="Virtual_reality" title="Virtual reality">virtual reality</a> communities,</li>
<li><a href="Distributed_database" title="Distributed database">distributed databases</a> and <a href="Distributed_database_management_system" class="mw-redirect" title="Distributed database management system">distributed database management systems</a>,</li>
<li><a href="Distributed_file_system" class="mw-redirect" title="Distributed file system">network file systems</a>,</li>
<li>distributed cache such as <a href="Burst_buffer" title="Burst buffer">burst buffers</a>,</li>
<li>distributed information processing systems such as banking systems and airline reservation systems;</li></ul></li>
<li>real-time process control:
<ul><li><a href="Aircraft" title="Aircraft">aircraft</a> control systems,</li>
<li><a href="Industrial_control_system" title="Industrial control system">industrial control systems</a>;</li></ul></li>
<li><a href="Parallel_computation" class="mw-redirect" title="Parallel computation">parallel computation</a>:
<ul><li><a href="Scientific_computing" class="mw-redirect" title="Scientific computing">scientific computing</a>, including <a href="Cluster_computing" class="mw-redirect" title="Cluster computing">cluster computing</a>, <a href="Grid_computing" title="Grid computing">grid computing</a>, <a href="Cloud_computing" title="Cloud computing">cloud computing</a>,<sup id="cite_ref-55" class="reference"><a href="#cite_note-55"><span class="cite-bracket">[</span>55<span class="cite-bracket">]</span></a></sup> and various <a href="List_of_volunteer_computing_projects" title="List of volunteer computing projects">volunteer computing projects</a>,</li>
<li><a href="Distributed_rendering" class="mw-redirect" title="Distributed rendering">distributed rendering</a> in computer graphics.</li></ul></li>
<li><a href="Peer-to-peer" title="Peer-to-peer">peer-to-peer</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Reactive_distributed_systems">Reactive distributed systems</h2></div>
<p>According to Reactive Manifesto, reactive distributed systems are responsive, resilient, elastic and message-driven. Subsequently, Reactive systems are more flexible, loosely-coupled and scalable. To make your systems reactive, you are advised to implement Reactive Principles. Reactive Principles are a set of principles and patterns which help to make your cloud native application as well as edge native applications more reactive. <sup id="cite_ref-56" class="reference"><a href="#cite_note-56"><span class="cite-bracket">[</span>56<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Theoretical_foundations">Theoretical foundations</h2></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Distributed_algorithm" title="Distributed algorithm">Distributed algorithm</a></div>
<div class="mw-heading mw-heading3"><h3 id="Models">Models</h3></div>
<p>Many tasks that we would like to automate by using a computer are of question–answer type: we would like to ask a question and the computer should produce an answer. In <a href="Theoretical_computer_science" title="Theoretical computer science">theoretical computer science</a>, such tasks are called <a href="Computational_problem" title="Computational problem">computational problems</a>. Formally, a computational problem consists of <i>instances</i> together with a <i>solution</i> for each instance. Instances are questions that we can ask, and solutions are desired answers to these questions.
</p><p>Theoretical computer science seeks to understand which computational problems can be solved by using a computer (<a href="Computability_theory" title="Computability theory">computability theory</a>) and how efficiently (<a href="Computational_complexity_theory" title="Computational complexity theory">computational complexity theory</a>). Traditionally, it is said that a problem can be solved by using a computer if we can design an <a href="Algorithm" title="Algorithm">algorithm</a> that produces a correct solution for any given instance. Such an algorithm can be implemented as a <a href="Computer_program" title="Computer program">computer program</a> that runs on a general-purpose computer: the program reads a problem instance from <a href="Information" title="Information">input</a>, performs some computation, and produces the solution as <a href="Output_(computing)" class="mw-redirect" title="Output (computing)">output</a>. Formalisms such as <a href="Random-access_machine" title="Random-access machine">random-access machines</a> or <a href="Universal_Turing_machine" title="Universal Turing machine">universal Turing machines</a> can be used as abstract models of a sequential general-purpose computer executing such an algorithm.<sup id="cite_ref-ToomarianNeural92_57-0" class="reference"><a href="#cite_note-ToomarianNeural92-57"><span class="cite-bracket">[</span>57<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-SavageModels98_58-0" class="reference"><a href="#cite_note-SavageModels98-58"><span class="cite-bracket">[</span>58<span class="cite-bracket">]</span></a></sup>
</p><p>The field of concurrent and distributed computing studies similar questions in the case of either multiple computers, or a computer that executes a network of interacting processes: which computational problems can be solved in such a network and how efficiently? However, it is not at all obvious what is meant by "solving a problem" in the case of a concurrent or distributed system: for example, what is the task of the algorithm designer, and what is the concurrent or distributed equivalent of a sequential general-purpose computer?
</p><p>The discussion below focuses on the case of multiple computers, although many of the issues are the same for concurrent processes running on a single computer.
</p><p>Three viewpoints are commonly used:
</p>
<dl><dt>Parallel algorithms in shared-memory model</dt></dl>
<ul><li>All processors have access to a shared memory. The algorithm designer chooses the program executed by each processor.</li>
<li>One theoretical model is the <a href="Parallel_random-access_machine" class="mw-redirect" title="Parallel random-access machine">parallel random-access machines</a> (PRAM) that are used.<sup id="cite_ref-59" class="reference"><a href="#cite_note-59"><span class="cite-bracket">[</span>59<span class="cite-bracket">]</span></a></sup> However, the classical PRAM model assumes synchronous access to the shared memory.</li>
<li>Shared-memory programs can be extended to distributed systems if the underlying operating system encapsulates the communication between nodes and virtually unifies the memory across all individual systems.</li>
<li>A model that is closer to the behavior of real-world multiprocessor machines and takes into account the use of machine instructions, such as <a href="Compare-and-swap" title="Compare-and-swap">Compare-and-swap</a> (CAS), is that of <i>asynchronous shared memory</i>. There is a wide body of work on this model, a summary of which can be found in the literature.<sup id="cite_ref-60" class="reference"><a href="#cite_note-60"><span class="cite-bracket">[</span>60<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-61" class="reference"><a href="#cite_note-61"><span class="cite-bracket">[</span>61<span class="cite-bracket">]</span></a></sup></li></ul>
<dl><dt>Parallel algorithms in message-passing model</dt></dl>
<ul><li>The algorithm designer chooses the structure of the network, as well as the program executed by each computer.</li>
<li>Models such as <a href="Boolean_circuits" class="mw-redirect" title="Boolean circuits">Boolean circuits</a> and <a href="Sorting_network" title="Sorting network">sorting networks</a> are used.<sup id="cite_ref-62" class="reference"><a href="#cite_note-62"><span class="cite-bracket">[</span>62<span class="cite-bracket">]</span></a></sup> A Boolean circuit can be seen as a computer network: each gate is a computer that runs an extremely simple computer program. Similarly, a sorting network can be seen as a computer network: each comparator is a computer.</li></ul>
<dl><dt>Distributed algorithms in message-passing model</dt></dl>
<ul><li>The algorithm designer only chooses the computer program. All computers run the same program. The system must work correctly regardless of the structure of the network.</li>
<li>A commonly used model is a <a href="Graph_(discrete_mathematics)" title="Graph (discrete mathematics)">graph</a> with one <a href="Finite-state_machine" title="Finite-state machine">finite-state machine</a> per node.</li></ul>
<p>In the case of distributed algorithms, computational problems are typically related to graphs. Often the graph that describes the structure of the computer network <i>is</i> the problem instance. This is illustrated in the following example.<sup id="cite_ref-:0_63-0" class="reference"><a href="#cite_note-:0-63"><span class="cite-bracket">[</span>63<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="An_example">An example</h3></div>
<p>Consider the computational problem of finding a coloring of a given graph <i>G</i>. Different fields might take the following approaches:
</p>
<dl><dt>Centralized algorithms<sup id="cite_ref-:0_63-1" class="reference"><a href="#cite_note-:0-63"><span class="cite-bracket">[</span>63<span class="cite-bracket">]</span></a></sup></dt></dl>
<ul><li>The graph <i>G</i> is encoded as a string, and the string is given as input to a computer. The computer program finds a coloring of the graph, encodes the coloring as a string, and outputs the result.</li></ul>
<dl><dt>Parallel algorithms</dt></dl>
<ul><li>Again, the graph <i>G</i> is encoded as a string. However, multiple computers can access the same string in parallel. Each computer might focus on one part of the graph and produce a coloring for that part.</li>
<li>The main focus is on high-performance computation that exploits the processing power of multiple computers in parallel.</li></ul>
<dl><dt>Distributed algorithms</dt></dl>
<ul><li>The graph <i>G</i> is the structure of the computer network. There is one computer for each node of <i>G</i> and one communication link for each edge of <i>G</i>. Initially, each computer only knows about its immediate neighbors in the graph <i>G</i>; the computers must exchange messages with each other to discover more about the structure of <i>G</i>. Each computer must produce its own color as output.</li>
<li>The main focus is on coordinating the operation of an arbitrary distributed system.<sup id="cite_ref-:0_63-2" class="reference"><a href="#cite_note-:0-63"><span class="cite-bracket">[</span>63<span class="cite-bracket">]</span></a></sup></li></ul>
<p>While the field of parallel algorithms has a different focus than the field of distributed algorithms, there is much interaction between the two fields. For example, the <a href="Cole%E2%80%93Vishkin_algorithm" class="mw-redirect" title="Cole–Vishkin algorithm">Cole–Vishkin algorithm</a> for graph coloring<sup id="cite_ref-64" class="reference"><a href="#cite_note-64"><span class="cite-bracket">[</span>64<span class="cite-bracket">]</span></a></sup> was originally presented as a parallel algorithm, but the same technique can also be used directly as a distributed algorithm.
</p><p>Moreover, a parallel algorithm can be implemented either in a parallel system (using shared memory) or in a distributed system (using message passing).<sup id="cite_ref-65" class="reference"><a href="#cite_note-65"><span class="cite-bracket">[</span>65<span class="cite-bracket">]</span></a></sup> The traditional boundary between parallel and distributed algorithms (choose a suitable network vs. run in any given network) does not lie in the same place as the boundary between parallel and distributed systems (shared memory vs. message passing).
</p>
<div class="mw-heading mw-heading3"><h3 id="Complexity_measures">Complexity measures</h3></div>
<p>In parallel algorithms, yet another resource in addition to time and space is the number of computers. Indeed, often there is a trade-off between the running time and the number of computers: the problem can be solved faster if there are more computers running in parallel (see <a href="Speedup" title="Speedup">speedup</a>). If a decision problem can be solved in <a href="Polylogarithmic_time" class="mw-redirect" title="Polylogarithmic time">polylogarithmic time</a> by using a polynomial number of processors, then the problem is said to be in the class <a href="NC_(complexity)" title="NC (complexity)">NC</a>.<sup id="cite_ref-66" class="reference"><a href="#cite_note-66"><span class="cite-bracket">[</span>66<span class="cite-bracket">]</span></a></sup> The class NC can be defined equally well by using the PRAM formalism or Boolean circuits—PRAM machines can simulate Boolean circuits efficiently and vice versa.<sup id="cite_ref-67" class="reference"><a href="#cite_note-67"><span class="cite-bracket">[</span>67<span class="cite-bracket">]</span></a></sup>
</p><p>In the analysis of distributed algorithms, more attention is usually paid on communication operations than computational steps. Perhaps the simplest model of distributed computing is a synchronous system where all nodes operate in a lockstep fashion. This model is commonly known as the LOCAL model. During each <i>communication round</i>, all nodes in parallel (1) receive the latest messages from their neighbours, (2) perform arbitrary local computation, and (3) send new messages to their neighbors. In such systems, a central complexity measure is the number of synchronous communication rounds required to complete the task.<sup id="cite_ref-68" class="reference"><a href="#cite_note-68"><span class="cite-bracket">[</span>68<span class="cite-bracket">]</span></a></sup>
</p><p>This complexity measure is closely related to the <a href="Diameter_(graph_theory)" title="Diameter (graph theory)">diameter</a> of the network. Let <i>D</i> be the diameter of the network. On the one hand, any computable problem can be solved trivially in a synchronous distributed system in approximately 2<i>D</i> communication rounds: simply gather all information in one location (<i>D</i> rounds), solve the problem, and inform each node about the solution (<i>D</i> rounds).
</p><p>On the other hand, if the running time of the algorithm is much smaller than <i>D</i> communication rounds, then the nodes in the network must produce their output without having the possibility to obtain information about distant parts of the network. In other words, the nodes must make globally consistent decisions based on information that is available in their <i>local D-neighbourhood</i>. Many distributed algorithms are known with the running time much smaller than <i>D</i> rounds, and understanding which problems can be solved by such algorithms is one of the central research questions of the field.<sup id="cite_ref-69" class="reference"><a href="#cite_note-69"><span class="cite-bracket">[</span>69<span class="cite-bracket">]</span></a></sup> Typically an algorithm which solves a problem in polylogarithmic time in the network size is considered efficient in this model.
</p><p>Another commonly used measure is the total number of bits transmitted in the network (cf. <a href="Communication_complexity" title="Communication complexity">communication complexity</a>).<sup id="cite_ref-SchneiderTrading11_70-0" class="reference"><a href="#cite_note-SchneiderTrading11-70"><span class="cite-bracket">[</span>70<span class="cite-bracket">]</span></a></sup> The features of this concept are typically captured with the CONGEST(B) model, which is similarly defined as the LOCAL model, but where single messages can only contain B bits.
</p>
<div class="mw-heading mw-heading3"><h3 id="Other_problems">Other problems</h3></div>
<p>Traditional computational problems take the perspective that the user asks a question, a computer (or a distributed system) processes the question, then produces an answer and stops. However, there are also problems where the system is required not to stop, including the <a href="Dining_philosophers_problem" title="Dining philosophers problem">dining philosophers problem</a> and other similar <a href="Mutual_exclusion" title="Mutual exclusion">mutual exclusion</a> problems. In these problems, the distributed system is supposed to continuously coordinate the use of shared resources so that no conflicts or <a href="Deadlock_(computer_science)" title="Deadlock (computer science)">deadlocks</a> occur.
</p><p>There are also fundamental challenges that are unique to distributed computing, for example those related to <i>fault-tolerance</i>. Examples of related problems include <a href="Consensus_(computer_science)" title="Consensus (computer science)">consensus problems</a>,<sup id="cite_ref-71" class="reference"><a href="#cite_note-71"><span class="cite-bracket">[</span>71<span class="cite-bracket">]</span></a></sup> <a href="Byzantine_fault_tolerance" class="mw-redirect" title="Byzantine fault tolerance">Byzantine fault tolerance</a>,<sup id="cite_ref-72" class="reference"><a href="#cite_note-72"><span class="cite-bracket">[</span>72<span class="cite-bracket">]</span></a></sup> and <a href="Self-stabilisation" class="mw-redirect" title="Self-stabilisation">self-stabilisation</a>.<sup id="cite_ref-73" class="reference"><a href="#cite_note-73"><span class="cite-bracket">[</span>73<span class="cite-bracket">]</span></a></sup>
</p><p>Much research is also focused on understanding the <i>asynchronous</i> nature of distributed systems:
</p>
<ul><li><a href="Synchronizer_(algorithm)" title="Synchronizer (algorithm)">Synchronizers</a> can be used to run synchronous algorithms in asynchronous systems.<sup id="cite_ref-74" class="reference"><a href="#cite_note-74"><span class="cite-bracket">[</span>74<span class="cite-bracket">]</span></a></sup></li>
<li><a href="Logical_clock" title="Logical clock">Logical clocks</a> provide a causal <a href="Happened-before" title="Happened-before">happened-before</a> ordering of events.<sup id="cite_ref-75" class="reference"><a href="#cite_note-75"><span class="cite-bracket">[</span>75<span class="cite-bracket">]</span></a></sup></li>
<li><a href="Clock_synchronization" title="Clock synchronization">Clock synchronization</a> algorithms provide globally consistent physical time stamps.<sup id="cite_ref-76" class="reference"><a href="#cite_note-76"><span class="cite-bracket">[</span>76<span class="cite-bracket">]</span></a></sup></li></ul>
<p>Note that in distributed systems, <a href="Latency_(engineering)" title="Latency (engineering)">latency</a> should be measured through "99th percentile" because "median" and "average" can be misleading.<sup id="cite_ref-77" class="reference"><a href="#cite_note-77"><span class="cite-bracket">[</span>77<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Election"><a href="Leader_election" title="Leader election">Election</a></h3></div>
<p><i>Coordinator election</i> (or <i>leader election</i>) is the process of designating a single <a href="Process_(computing)" title="Process (computing)">process</a> as the organizer of some task distributed among several computers (nodes). Before the task is begun, all network nodes are either unaware which node will serve as the "coordinator" (or leader) of the task, or unable to communicate with the current coordinator. After a coordinator election algorithm has been run, however, each node throughout the network recognizes a particular, unique node as the task coordinator.<sup id="cite_ref-HaloiApache15_78-0" class="reference"><a href="#cite_note-HaloiApache15-78"><span class="cite-bracket">[</span>78<span class="cite-bracket">]</span></a></sup>
</p><p>The network nodes communicate among themselves in order to decide which of them will get into the "coordinator" state. For that, they need some method in order to break the symmetry among them. For example, if each node has unique and comparable identities, then the nodes can compare their identities, and decide that the node with the highest identity is the coordinator.<sup id="cite_ref-HaloiApache15_78-1" class="reference"><a href="#cite_note-HaloiApache15-78"><span class="cite-bracket">[</span>78<span class="cite-bracket">]</span></a></sup>
</p><p>The definition of this problem is often attributed to <a href="G%C3%A9rard_Le_Lann" title="Gérard Le Lann">LeLann</a>, who formalized it as a method to create a new token in a token <a href="Ring_network" title="Ring network">ring network</a> in which the token has been lost.<sup id="cite_ref-79" class="reference"><a href="#cite_note-79"><span class="cite-bracket">[</span>79<span class="cite-bracket">]</span></a></sup>
</p><p>Coordinator election algorithms are designed to be economical in terms of total <a href="Byte" title="Byte">bytes</a> transmitted, and time. The algorithm suggested by Gallager, Humblet, and Spira<sup id="cite_ref-80" class="reference"><a href="#cite_note-80"><span class="cite-bracket">[</span>80<span class="cite-bracket">]</span></a></sup> for general undirected graphs has had a strong impact on the design of distributed algorithms in general, and won the <a href="Dijkstra_Prize" class="mw-redirect" title="Dijkstra Prize">Dijkstra Prize</a> for an influential paper in distributed computing.
</p><p>Many other algorithms were suggested for different kinds of network <a href="Graph_(discrete_mathematics)" title="Graph (discrete mathematics)">graphs</a>, such as undirected rings, unidirectional rings, complete graphs, grids, directed Euler graphs, and others. A general method that decouples the issue of the graph family from the design of the coordinator election algorithm was suggested by Korach, Kutten, and Moran.<sup id="cite_ref-81" class="reference"><a href="#cite_note-81"><span class="cite-bracket">[</span>81<span class="cite-bracket">]</span></a></sup>
</p><p>In order to perform coordination, distributed systems employ the concept of coordinators. The coordinator election problem is to choose a process from among a group of processes on different processors in a distributed system to act as the central coordinator. Several central coordinator election algorithms exist.<sup id="cite_ref-82" class="reference"><a href="#cite_note-82"><span class="cite-bracket">[</span>82<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Properties_of_distributed_systems">Properties of distributed systems</h3></div>
<p>So far the focus has been on <i>designing</i> a distributed system that solves a given problem. A complementary research problem is <i>studying</i> the properties of a given distributed system.<sup id="cite_ref-83" class="reference"><a href="#cite_note-83"><span class="cite-bracket">[</span>83<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-84" class="reference"><a href="#cite_note-84"><span class="cite-bracket">[</span>84<span class="cite-bracket">]</span></a></sup>
</p><p>The <a href="Halting_problem" title="Halting problem">halting problem</a> is an analogous example from the field of centralised computation: we are given a computer program and the task is to decide whether it halts or runs forever. The halting problem is <a href="Undecidable_problem" title="Undecidable problem">undecidable</a> in the general case, and naturally understanding the behaviour of a computer network is at least as hard as understanding the behaviour of one computer.<sup id="cite_ref-SvozilIndet11_85-0" class="reference"><a href="#cite_note-SvozilIndet11-85"><span class="cite-bracket">[</span>85<span class="cite-bracket">]</span></a></sup>
</p><p>However, there are many interesting special cases that are decidable. In particular, it is possible to reason about the behaviour of a network of finite-state machines. One example is telling whether a given network of interacting (asynchronous and non-deterministic) finite-state machines can reach a deadlock. This problem is <a href="PSPACE-complete" title="PSPACE-complete">PSPACE-complete</a>,<sup id="cite_ref-86" class="reference"><a href="#cite_note-86"><span class="cite-bracket">[</span>86<span class="cite-bracket">]</span></a></sup> i.e., it is decidable, but not likely that there is an efficient (centralised, parallel or distributed) algorithm that solves the problem in the case of large networks.
</p>
<div class="mw-heading mw-heading3"><h3 id="Other_Topics">Other Topics</h3></div>
<p><a href="Linearizability" title="Linearizability">Linearizability</a>
</p>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1184024115">
/* start https://en.wikipedia.org/ */
.mw-parser-output .div-col{margin-top:0.3em;column-width:30em}.mw-parser-output .div-col-small{font-size:90%}.mw-parser-output .div-col-rules{column-rule:1px solid #aaa}.mw-parser-output .div-col dl,.mw-parser-output .div-col ol,.mw-parser-output .div-col ul{margin-top:0}.mw-parser-output .div-col li,.mw-parser-output .div-col dd{page-break-inside:avoid;break-inside:avoid-column}
/* end https://en.wikipedia.org/ */
</style><div class="div-col" style="column-width: 20em;">
<ul><li><a href="Actor_model" title="Actor model">Actor model</a> – Model of concurrent computation</li>
<li><a href="AppScale" title="AppScale">AppScale</a> – American cloud infrastructure software company</li>
<li><a href="BOINC" class="mw-redirect" title="BOINC">BOINC</a> – Open source middleware system for volunteer and grid computing<span style="display:none" class="category-annotation-with-redirected-description">Pages displaying short descriptions of redirect targets</span></li>
<li><a href="Code_mobility" title="Code mobility">Code mobility</a> – Process in distributed computing</li>
<li><a href="Dataflow_programming" title="Dataflow programming">Dataflow programming</a> – Computer programming paradigm</li>
<li><a href="Decentralized_computing" title="Decentralized computing">Decentralized computing</a> – Distribution of jobs across different computers</li>
<li><a href="Distributed_algorithm" title="Distributed algorithm">Distributed algorithm</a> – Algorithm run on hardware built from interconnected processors</li>
<li><a href="Distributed_algorithmic_mechanism_design" title="Distributed algorithmic mechanism design">Distributed algorithmic mechanism design</a></li>
<li><a href="Distributed_cache" title="Distributed cache">Distributed cache</a> – Type of computer cache</li>
<li><a href="Distributed_GIS" title="Distributed GIS">Distributed GIS</a> – A type of Geographic Information System</li>
<li><a href="Distributed_networking" title="Distributed networking">Distributed networking</a> – Multi-source interconnected computing</li>
<li><a href="Distributed_operating_system" title="Distributed operating system">Distributed operating system</a> – Operating system designed to operate on multiple systems over a network computer</li>
<li><a href="Eventual_consistency" title="Eventual consistency">Eventual consistency</a> – Consistency model used in distributed computing to achieve high availability</li>
<li><a href="Edsger_W._Dijkstra_Prize_in_Distributed_Computing" class="mw-redirect" title="Edsger W. Dijkstra Prize in Distributed Computing">Edsger W. Dijkstra Prize in Distributed Computing</a> – Annual conference on computing<span style="display:none" class="category-annotation-with-redirected-description">Pages displaying short descriptions of redirect targets</span></li>
<li><a href="Federation_(information_technology)" title="Federation (information technology)">Federation (information technology)</a> – Group of network or telecommunication providers agreeing upon interoperability standards</li>
<li><a href="Flat_neighborhood_network" title="Flat neighborhood network">Flat neighborhood network</a></li>
<li><a href="Fog_computing" title="Fog computing">Fog computing</a> – Architecture that uses edge devices</li>
<li><a href="Folding%40home" title="Folding@home">Folding@home</a> – Distributed computing project simulating protein folding</li>
<li><a href="Grid_computing" title="Grid computing">Grid computing</a> – Use of widely distributed computer resources to reach a common goal</li>
<li><a href="Inferno_(operating_system)" title="Inferno (operating system)">Inferno</a> – Distributed operating system</li>
<li><a href="Internet_GIS" title="Internet GIS">Internet GIS</a> – Internet technologies regarding spatial data</li>
<li><a href="Jungle_computing" title="Jungle computing">Jungle computing</a> – Type of distributed computing</li>
<li><a href="Layered_queueing_network" title="Layered queueing network">Layered queueing network</a></li>
<li>Library Oriented Architecture (LOA)</li>
<li><a href="List_of_distributed_computing_conferences" title="List of distributed computing conferences">List of distributed computing conferences</a></li>
<li><a href="List_of_volunteer_computing_projects" title="List of volunteer computing projects">List of volunteer computing projects</a> – Comprehensive list of volunteer computing projects</li>
<li><a href="Model_checking" title="Model checking">Model checking</a> – Computer science field</li>
<li><a href="OpenHarmony" title="OpenHarmony">OpenHarmony</a> – Family of open-source operating systems based on HarmonyOS</li>
<li><a href="HarmonyOS" title="HarmonyOS">HarmonyOS</a> – Distributed operating system by Huawei</li>
<li><a href="Parallel_distributed_processing" class="mw-redirect" title="Parallel distributed processing">Parallel distributed processing</a> – Cognitive science approach<span style="display:none" class="category-annotation-with-redirected-description">Pages displaying short descriptions of redirect targets</span></li>
<li><a href="Parallel_programming_model" title="Parallel programming model">Parallel programming model</a> – Abstraction of parallel computer architecture</li>
<li><a href="Plan_9_from_Bell_Labs" title="Plan 9 from Bell Labs">Plan 9 from Bell Labs</a> – Research distributed operating system</li>
<li><a href="Shared_nothing_architecture" class="mw-redirect" title="Shared nothing architecture">Shared nothing architecture</a> – Type of distributed computing architecture<span style="display:none" class="category-annotation-with-redirected-description">Pages displaying short descriptions of redirect targets</span></li>
<li><a href="Web_GIS" title="Web GIS">Web GIS</a> – Technologies employing the World Wide Web to manage spatial data</li></ul>
</div>
<div class="mw-heading mw-heading2"><h2 id="Notes">Notes</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist reflist-columns references-column-width" style="column-width: 30em;">
<ol class="references">
<li id="cite_note-tanenbaum-1"><span class="mw-cite-backlink">^ <a href="#cite_ref-tanenbaum_1-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-tanenbaum_1-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFTanenbaum,_Andrew_S.Steen,_Maarten_van2002" class="citation book cs1">Tanenbaum, Andrew S.; Steen, Maarten van (2002). <a rel="nofollow" class="external text" href="https://www.distributed-systems.net/index.php/books/ds3/"><i>Distributed systems: principles and paradigms</i></a>. Upper Saddle River, NJ: Pearson Prentice Hall. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-13-088893-1</bdi>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20200812174339/https://www.distributed-systems.net/index.php/books/ds3/">Archived</a> from the original on 2020-08-12<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-08-28</span></span>.</cite></span>
</li>
<li id="cite_note-Distributed_Programs_2010_pp._373–406-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-Distributed_Programs_2010_pp._373–406_2-0">^</a></b></span> <span class="reference-text"><cite class="citation book cs1">"Distributed Programs". <i>Texts in Computer Science</i>. London: Springer London. 2010. pp. <span class="nowrap">373–</span>406. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2F978-1-84882-745-5_11">10.1007/978-1-84882-745-5_11</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-84882-744-8</bdi>. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/1868-0941">1868-0941</a>. <q>Systems consist of a number of physically distributed components that work independently using their private storage, but also communicate from time to time by explicit message passing. Such systems are called distributed systems.</q></cite></span>
</li>
<li id="cite_note-FOOTNOTEDusseauDusseau20161–2-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-FOOTNOTEDusseauDusseau20161–2_3-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFDusseauDusseau2016">Dusseau & Dusseau 2016</a>, p. 1–2.</span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite id="CITEREFFord2020" class="citation book cs1">Ford, Neal (March 3, 2020). <i>Fundamentals of Software Architecture: An Engineering Approach</i> (1st ed.). O'Reilly Media. pp. <span class="nowrap">146–</span>147. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1492043454</bdi>.</cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite class="citation book cs1"><i>Monolith to Microservices Evolutionary Patterns to Transform Your Monolith</i>. O'Reilly Media. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9781492047810</bdi>.</cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite class="citation book cs1"><i>Building Serverless Applications on Knative</i>. O'Reilly Media. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9781098142049</bdi>.</cite></span>
</li>
<li id="cite_note-Distributed_Programs_2010_pp._373–406_II-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-Distributed_Programs_2010_pp._373–406_II_7-0">^</a></b></span> <span class="reference-text"><cite class="citation book cs1">"Distributed Programs". <i>Texts in Computer Science</i>. London: Springer London. 2010. pp. <span class="nowrap">373–</span>406. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2F978-1-84882-745-5_11">10.1007/978-1-84882-745-5_11</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-84882-744-8</bdi>. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/1868-0941">1868-0941</a>. <q>Distributed programs are abstract descriptions of distributed systems. A distributed program consists of a collection of processes that work concurrently and communicate by explicit message passing. Each process can access a set of variables which are disjoint from the variables that can be changed by any other process.</q></cite></span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><a href="#CITEREFAndrews2000">Andrews (2000)</a>. <a href="#CITEREFDolev2000">Dolev (2000)</a>. <a href="#CITEREFGhosh2007">Ghosh (2007)</a>, p. 10.</span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><cite id="CITEREFMagnoni2015" class="citation journal cs1">Magnoni, L. (2015). <a rel="nofollow" class="external text" href="https://doi.org/10.1088%2F1742-6596%2F608%2F1%2F012038">"Modern Messaging for Distributed Sytems (sic)"</a>. <i>Journal of Physics: Conference Series</i>. <b>608</b> (1): 012038. <a href="Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/2015JPhCS.608a2038M">2015JPhCS.608a2038M</a>. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1088%2F1742-6596%2F608%2F1%2F012038">10.1088/1742-6596/608/1/012038</a></span>. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/1742-6596">1742-6596</a>.</cite></span>
</li>
<li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><a href="#CITEREFGodfrey2002">Godfrey (2002)</a>.</span>
</li>
<li id="cite_note-Andrews_2000-11"><span class="mw-cite-backlink">^ <a href="#cite_ref-Andrews_2000_11-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Andrews_2000_11-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><a href="#CITEREFAndrews2000">Andrews (2000)</a>, p. 291–292. <a href="#CITEREFDolev2000">Dolev (2000)</a>, p. 5.</span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><a href="#CITEREFLynch1996">Lynch (1996)</a>, p. 1.</span>
</li>
<li id="cite_note-harvtxt|Ghosh|2007-13"><span class="mw-cite-backlink">^ <a href="#cite_ref-harvtxt|Ghosh|2007_13-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-harvtxt|Ghosh|2007_13-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><a href="#CITEREFGhosh2007">Ghosh (2007)</a>, p. 10.</span>
</li>
<li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text"><a href="#CITEREFAndrews2000">Andrews (2000)</a>, pp. 8–9, 291. <a href="#CITEREFDolev2000">Dolev (2000)</a>, p. 5. <a href="#CITEREFGhosh2007">Ghosh (2007)</a>, p. 3. <a href="#CITEREFLynch1996">Lynch (1996)</a>, p. xix, 1. <a href="#CITEREFPeleg2000">Peleg (2000)</a>, p. xv.</span>
</li>
<li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><a href="#CITEREFAndrews2000">Andrews (2000)</a>, p. 291. <a href="#CITEREFGhosh2007">Ghosh (2007)</a>, p. 3. <a href="#CITEREFPeleg2000">Peleg (2000)</a>, p. 4.</span>
</li>
<li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><a href="#CITEREFGhosh2007">Ghosh (2007)</a>, p. 3–4. <a href="#CITEREFPeleg2000">Peleg (2000)</a>, p. 1.</span>
</li>
<li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><a href="#CITEREFGhosh2007">Ghosh (2007)</a>, p. 4. <a href="#CITEREFPeleg2000">Peleg (2000)</a>, p. 2.</span>
</li>
<li id="cite_note-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-18">^</a></b></span> <span class="reference-text"><a href="#CITEREFGhosh2007">Ghosh (2007)</a>, p. 4, 8. <a href="#CITEREFLynch1996">Lynch (1996)</a>, p. 2–3. <a href="#CITEREFPeleg2000">Peleg (2000)</a>, p. 4.</span>
</li>
<li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text"><a href="#CITEREFLynch1996">Lynch (1996)</a>, p. 2. <a href="#CITEREFPeleg2000">Peleg (2000)</a>, p. 1.</span>
</li>
<li id="cite_note-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-20">^</a></b></span> <span class="reference-text"><a href="#CITEREFGhosh2007">Ghosh (2007)</a>, p. 7. <a href="#CITEREFLynch1996">Lynch (1996)</a>, p. xix, 2. <a href="#CITEREFPeleg2000">Peleg (2000)</a>, p. 4.</span>
</li>
<li id="cite_note-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-21">^</a></b></span> <span class="reference-text"><cite class="citation book cs1"><i>Fundamentals of Software Architecture: An Engineering Approach</i>. O'Reilly Media. 2020. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1492043454</bdi>.</cite></span>
</li>
<li id="cite_note-:1-22"><span class="mw-cite-backlink">^ <a href="#cite_ref-:1_22-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-:1_22-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-:1_22-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-:1_22-3"><sup><i><b>d</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFKleppmann2017" class="citation book cs1">Kleppmann, Martin (2017). <i>Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems</i>. O'Reilly Media. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1449373320</bdi>.</cite></span>
</li>
<li id="cite_note-:2-23"><span class="mw-cite-backlink">^ <a href="#cite_ref-:2_23-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-:2_23-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-:2_23-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-:2_23-3"><sup><i><b>d</b></i></sup></a></span> <span class="reference-text"><cite class="citation book cs1"><i>Building Event-Driven Microservices: Leveraging Organizational Data at Scale</i>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1492057895</bdi>.</cite></span>
</li>
<li id="cite_note-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-24">^</a></b></span> <span class="reference-text"><a href="#CITEREFGhosh2007">Ghosh (2007)</a>, p. 10. <a href="#CITEREFKeidar2008">Keidar (2008)</a>.</span>
</li>
<li id="cite_note-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-25">^</a></b></span> <span class="reference-text"><a href="#CITEREFLynch1996">Lynch (1996)</a>, p. xix, 1–2. <a href="#CITEREFPeleg2000">Peleg (2000)</a>, p. 1.</span>
</li>
<li id="cite_note-26"><span class="mw-cite-backlink"><b><a href="#cite_ref-26">^</a></b></span> <span class="reference-text"><a href="#CITEREFPeleg2000">Peleg (2000)</a>, p. 1.</span>
</li>
<li id="cite_note-27"><span class="mw-cite-backlink"><b><a href="#cite_ref-27">^</a></b></span> <span class="reference-text"><a href="#CITEREFPapadimitriou1994">Papadimitriou (1994)</a>, Chapter 15. <a href="#CITEREFKeidar2008">Keidar (2008)</a>.</span>
</li>
<li id="cite_note-28"><span class="mw-cite-backlink"><b><a href="#cite_ref-28">^</a></b></span> <span class="reference-text">See references in <a href="#Introduction">Introduction</a>.</span>
</li>
<li id="cite_note-BetalebParallel16-29"><span class="mw-cite-backlink"><b><a href="#cite_ref-BetalebParallel16_29-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFBentaleb,_A.Yifan,_L.Xin,_J.2016" class="citation web cs1">Bentaleb, A.; Yifan, L.; Xin, J.; et al. (2016). <a rel="nofollow" class="external text" href="http://www.comp.nus.edu.sg/~rahul/allfiles/cs6234-16-pds.pdf">"Parallel and Distributed Algorithms"</a> <span class="cs1-format">(PDF)</span>. National University of Singapore. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20170326210614/http://www.comp.nus.edu.sg/~rahul/allfiles/cs6234-16-pds.pdf">Archived</a> <span class="cs1-format">(PDF)</span> from the original on 2017-03-26<span class="reference-accessdate">. Retrieved <span class="nowrap">20 July</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-30"><span class="mw-cite-backlink"><b><a href="#cite_ref-30">^</a></b></span> <span class="reference-text"><a href="#CITEREFAndrews2000">Andrews (2000)</a>, p. 348.</span>
</li>
<li id="cite_note-31"><span class="mw-cite-backlink"><b><a href="#cite_ref-31">^</a></b></span> <span class="reference-text"><a href="#CITEREFAndrews2000">Andrews (2000)</a>, p. 32.</span>
</li>
<li id="cite_note-32"><span class="mw-cite-backlink"><b><a href="#cite_ref-32">^</a></b></span> <span class="reference-text"><a href="#CITEREFPeter2004">Peter (2004)</a>, <a rel="nofollow" class="external text" href="http://www.nethistory.info/History%20of%20the%20Internet/email.html">The history of email</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20090415220152/http://www.nethistory.info/History%20of%20the%20Internet/email.html">Archived</a> 2009-04-15 at the <a href="Wayback_Machine" title="Wayback Machine">Wayback Machine</a>.</span>
</li>
<li id="cite_note-BanksOnThe12-33"><span class="mw-cite-backlink"><b><a href="#cite_ref-BanksOnThe12_33-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFBanks,_M.2012" class="citation book cs1">Banks, M. (2012). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=1J78hiHKaPoC&pg=PT67"><i>On the Way to the Web: The Secret History of the Internet and its Founders</i></a>. Apress. pp. <span class="nowrap">44–</span>5. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9781430250746</bdi>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20230120182450/https://books.google.com/books?id=1J78hiHKaPoC&pg=PT67">Archived</a> from the original on 2023-01-20<span class="reference-accessdate">. Retrieved <span class="nowrap">2018-07-20</span></span>.</cite></span>
</li>
<li id="cite_note-TelIntro00-34"><span class="mw-cite-backlink"><b><a href="#cite_ref-TelIntro00_34-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFTel,_G.2000" class="citation book cs1">Tel, G. (2000). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=vlpnS25qAJQC&pg=PA35"><i>Introduction to Distributed Algorithms</i></a>. Cambridge University Press. pp. <span class="nowrap">35–</span>36. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9780521794831</bdi>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20230120182450/https://books.google.com/books?id=vlpnS25qAJQC&pg=PA35">Archived</a> from the original on 2023-01-20<span class="reference-accessdate">. Retrieved <span class="nowrap">2018-07-20</span></span>.</cite></span>
</li>
<li id="cite_note-OhlídalEvo06-35"><span class="mw-cite-backlink"><b><a href="#cite_ref-OhlídalEvo06_35-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFOhlídal,_M.Jaroš,_J.Schwarz,_J.2006" class="citation book cs1">Ohlídal, M.; Jaroš, J.; Schwarz, J.; et al. (2006). "Evolutionary Design of OAB and AAB Communication Schedules for Interconnection Networks". In Rothlauf, F.; Branke, J.; Cagnoni, S. (eds.). <i>Applications of Evolutionary Computing</i>. Springer Science & Business Media. pp. <span class="nowrap">267–</span>78. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9783540332374</bdi>.</cite></span>
</li>
<li id="cite_note-36"><span class="mw-cite-backlink"><b><a href="#cite_ref-36">^</a></b></span> <span class="reference-text"><cite class="citation journal cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20170110015222/https://pdfs.semanticscholar.org/2950/37ee46ac281590f67435380cebc385ac9749.pdf">"Real Time And Distributed Computing Systems"</a> <span class="cs1-format">(PDF)</span>. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/2278-0661">2278-0661</a>. Archived from <a rel="nofollow" class="external text" href="https://pdfs.semanticscholar.org/2950/37ee46ac281590f67435380cebc385ac9749.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 2017-01-10<span class="reference-accessdate">. Retrieved <span class="nowrap">2017-01-09</span></span>.</cite> <span class="cs1-visible-error citation-comment"><code class="cs1-code">{{cite journal}}</code>: </span><span class="cs1-visible-error citation-comment">Cite journal requires <code class="cs1-code">|journal=</code> (help)</span></span>
</li>
<li id="cite_note-Vigna20150127-37"><span class="mw-cite-backlink"><b><a href="#cite_ref-Vigna20150127_37-0">^</a></b></span> <span class="reference-text">Vigna P, Casey MJ. <i>The Age of Cryptocurrency: How Bitcoin and the Blockchain Are Challenging the Global Economic Order</i> St. Martin's Press January 27, 2015 <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9781250065636</bdi></span>
</li>
<li id="cite_note-38"><span class="mw-cite-backlink"><b><a href="#cite_ref-38">^</a></b></span> <span class="reference-text"><cite id="CITEREFQuang_Hieu_VuMihai_LupuBeng_Chin_Ooi2010" class="citation book cs1">Quang Hieu Vu; Mihai Lupu; Beng Chin Ooi (2010). <i>Peer-to-peer computing : principles and applications</i>. Heidelberg: Springer. p. 16. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9783642035135</bdi>. <a href="OCLC_(identifier)" class="mw-redirect" title="OCLC (identifier)">OCLC</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/oclc/663093862">663093862</a>.</cite></span>
</li>
<li id="cite_note-39"><span class="mw-cite-backlink"><b><a href="#cite_ref-39">^</a></b></span> <span class="reference-text"><cite id="CITEREFLindAlm2006" class="citation cs2">Lind P, Alm M (2006), "A database-centric virtual chemistry system", <i>J Chem Inf Model</i>, <b>46</b> (3): <span class="nowrap">1034–</span>9, <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1021%2Fci050360b">10.1021/ci050360b</a>, <a href="PMID_(identifier)" class="mw-redirect" title="PMID (identifier)">PMID</a> <a rel="nofollow" class="external text" href="https://pubmed.ncbi.nlm.nih.gov/16711722">16711722</a>.</cite></span>
</li>
<li id="cite_note-40"><span class="mw-cite-backlink"><b><a href="#cite_ref-40">^</a></b></span> <span class="reference-text"><cite id="CITEREFChiu1990" class="citation journal cs1">Chiu, G (1990). "A model for optimal database allocation in distributed computing systems". <i>Proceedings. IEEE INFOCOM'90: Ninth Annual Joint Conference of the IEEE Computer and Communications Societies</i>.</cite></span>
</li>
<li id="cite_note-:22-41"><span class="mw-cite-backlink"><b><a href="#cite_ref-:22_41-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFNewman2015" class="citation book cs1">Newman, Sam (2015-02-20). <i>Building Microservices</i>. O'Reilly Media. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1491950357</bdi>.</cite></span>
</li>
<li id="cite_note-:3-42"><span class="mw-cite-backlink"><b><a href="#cite_ref-:3_42-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFRichardson2019" class="citation book cs1">Richardson, Chris (2019). <i>Microservices patterns: with examples in Java</i>. Shelter Island, NY: Manning Publications. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-61729-454-9</bdi>.</cite></span>
</li>
<li id="cite_note-:4-43"><span class="mw-cite-backlink"><b><a href="#cite_ref-:4_43-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFChristudas2019" class="citation book cs1">Christudas, Binildas (2019). <i>Practical Microservices Architectural Patterns: Event-Based Java Microservices with Spring Boot and Spring Cloud</i>. Berkeley, CA: Apress L. P. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-4842-4501-9</bdi>.</cite></span>
</li>
<li id="cite_note-:23-44"><span class="mw-cite-backlink"><b><a href="#cite_ref-:23_44-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFNewman2015" class="citation book cs1">Newman, Sam (2015-02-20). <i>Building Microservices</i>. O'Reilly Media. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1491950357</bdi>.</cite></span>
</li>
<li id="cite_note-:32-45"><span class="mw-cite-backlink"><b><a href="#cite_ref-:32_45-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFRichardson2019" class="citation book cs1">Richardson, Chris (2019). <i>Microservices patterns: with examples in Java</i>. Shelter Island, NY: Manning Publications. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-61729-454-9</bdi>.</cite></span>
</li>
<li id="cite_note-:42-46"><span class="mw-cite-backlink"><b><a href="#cite_ref-:42_46-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFChristudas2019" class="citation book cs1">Christudas, Binildas (2019). <i>Practical Microservices Architectural Patterns: Event-Based Java Microservices with Spring Boot and Spring Cloud</i>. Berkeley, CA: Apress L. P. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-4842-4501-9</bdi>.</cite></span>
</li>
<li id="cite_note-:24-47"><span class="mw-cite-backlink"><b><a href="#cite_ref-:24_47-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFNewman2015" class="citation book cs1">Newman, Sam (2015-02-20). <i>Building Microservices</i>. O'Reilly Media. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1491950357</bdi>.</cite></span>
</li>
<li id="cite_note-:33-48"><span class="mw-cite-backlink"><b><a href="#cite_ref-:33_48-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFRichardson2019" class="citation book cs1">Richardson, Chris (2019). <i>Microservices patterns: with examples in Java</i>. Shelter Island, NY: Manning Publications. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-61729-454-9</bdi>.</cite></span>
</li>
<li id="cite_note-:43-49"><span class="mw-cite-backlink"><b><a href="#cite_ref-:43_49-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFChristudas2019" class="citation book cs1">Christudas, Binildas (2019). <i>Practical Microservices Architectural Patterns: Event-Based Java Microservices with Spring Boot and Spring Cloud</i>. Berkeley, CA: Apress L. P. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-4842-4501-9</bdi>.</cite></span>
</li>
<li id="cite_note-:25-50"><span class="mw-cite-backlink"><b><a href="#cite_ref-:25_50-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFNewman2015" class="citation book cs1">Newman, Sam (2015-02-20). <i>Building Microservices</i>. O'Reilly Media. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1491950357</bdi>.</cite></span>
</li>
<li id="cite_note-:34-51"><span class="mw-cite-backlink"><b><a href="#cite_ref-:34_51-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFRichardson2019" class="citation book cs1">Richardson, Chris (2019). <i>Microservices patterns: with examples in Java</i>. Shelter Island, NY: Manning Publications. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-61729-454-9</bdi>.</cite></span>
</li>
<li id="cite_note-:44-52"><span class="mw-cite-backlink"><b><a href="#cite_ref-:44_52-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFChristudas2019" class="citation book cs1">Christudas, Binildas (2019). <i>Practical Microservices Architectural Patterns: Event-Based Java Microservices with Spring Boot and Spring Cloud</i>. Berkeley, CA: Apress L. P. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-4842-4501-9</bdi>.</cite></span>
</li>
<li id="cite_note-53"><span class="mw-cite-backlink"><b><a href="#cite_ref-53">^</a></b></span> <span class="reference-text"><a href="#CITEREFElmasriNavathe2000">Elmasri & Navathe (2000)</a>, Section 24.1.2.</span>
</li>
<li id="cite_note-54"><span class="mw-cite-backlink"><b><a href="#cite_ref-54">^</a></b></span> <span class="reference-text"><a href="#CITEREFAndrews2000">Andrews (2000)</a>, p. 10–11. <a href="#CITEREFGhosh2007">Ghosh (2007)</a>, p. 4–6. <a href="#CITEREFLynch1996">Lynch (1996)</a>, p. xix, 1. <a href="#CITEREFPeleg2000">Peleg (2000)</a>, p. xv. <a href="#CITEREFElmasriNavathe2000">Elmasri & Navathe (2000)</a>, Section 24.</span>
</li>
<li id="cite_note-55"><span class="mw-cite-backlink"><b><a href="#cite_ref-55">^</a></b></span> <span class="reference-text"><cite id="CITEREFHaussmann2019" class="citation journal cs1">Haussmann, J. (2019). "Cost-efficient parallel processing of irregularly structured problems in cloud computing environments". <i>Journal of Cluster Computing</i>. <b>22</b> (3): <span class="nowrap">887–</span>909. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2Fs10586-018-2879-3">10.1007/s10586-018-2879-3</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:54447518">54447518</a>.</cite></span>
</li>
<li id="cite_note-56"><span class="mw-cite-backlink"><b><a href="#cite_ref-56">^</a></b></span> <span class="reference-text"><cite class="citation book cs1"><i>Reactive Application Development</i>. Manning. 2018. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9781638355816</bdi>.</cite></span>
</li>
<li id="cite_note-ToomarianNeural92-57"><span class="mw-cite-backlink"><b><a href="#cite_ref-ToomarianNeural92_57-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFToomarian,_N.B.Barhen,_J.Gulati,_S.1992" class="citation book cs1">Toomarian, N.B.; Barhen, J.; Gulati, S. (1992). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=CKTsCgAAQBAJ&pg=PA214">"Neural Networks for Real-Time Robotic Applications"</a>. In Fijany, A.; Bejczy, A. (eds.). <i>Parallel Computation Systems For Robotics: Algorithms And Architectures</i>. World Scientific. p. 214. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9789814506175</bdi>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20200801024715/https://books.google.com/books?id=CKTsCgAAQBAJ&pg=PA214">Archived</a> from the original on 2020-08-01<span class="reference-accessdate">. Retrieved <span class="nowrap">2018-07-20</span></span>.</cite></span>
</li>
<li id="cite_note-SavageModels98-58"><span class="mw-cite-backlink"><b><a href="#cite_ref-SavageModels98_58-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFSavage,_J.E.1998" class="citation book cs1">Savage, J.E. (1998). <i>Models of Computation: Exploring the Power of Computing</i>. Addison Wesley. p. 209. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9780201895391</bdi>.</cite></span>
</li>
<li id="cite_note-59"><span class="mw-cite-backlink"><b><a href="#cite_ref-59">^</a></b></span> <span class="reference-text"><a href="#CITEREFCormenLeisersonRivest1990">Cormen, Leiserson & Rivest (1990)</a>, Section 30.</span>
</li>
<li id="cite_note-60"><span class="mw-cite-backlink"><b><a href="#cite_ref-60">^</a></b></span> <span class="reference-text"><a href="#CITEREFHerlihyShavit2008">Herlihy & Shavit (2008)</a>, Chapters 2–6.</span>
</li>
<li id="cite_note-61"><span class="mw-cite-backlink"><b><a href="#cite_ref-61">^</a></b></span> <span class="reference-text"><a href="#CITEREFLynch1996">Lynch (1996)</a></span>
</li>
<li id="cite_note-62"><span class="mw-cite-backlink"><b><a href="#cite_ref-62">^</a></b></span> <span class="reference-text"><a href="#CITEREFCormenLeisersonRivest1990">Cormen, Leiserson & Rivest (1990)</a>, Sections 28 and 29.</span>
</li>
<li id="cite_note-:0-63"><span class="mw-cite-backlink">^ <a href="#cite_ref-:0_63-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-:0_63-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-:0_63-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text">TULSIRAMJI GAIKWAD-PATIL College of Engineering & Technology,
Nagpur
Department of Information Technology
Introduction to Distributed Systems<a rel="nofollow" class="external autonumber" href="http://www.tgpcet.com/assets/img/IT/Notes/8/Distributed-System.pdf">[1]</a></span>
</li>
<li id="cite_note-64"><span class="mw-cite-backlink"><b><a href="#cite_ref-64">^</a></b></span> <span class="reference-text"><a href="#CITEREFColeVishkin1986">Cole & Vishkin (1986)</a>. <a href="#CITEREFCormenLeisersonRivest1990">Cormen, Leiserson & Rivest (1990)</a>, Section 30.5.</span>
</li>
<li id="cite_note-65"><span class="mw-cite-backlink"><b><a href="#cite_ref-65">^</a></b></span> <span class="reference-text"><a href="#CITEREFAndrews2000">Andrews (2000)</a>, p. ix.</span>
</li>
<li id="cite_note-66"><span class="mw-cite-backlink"><b><a href="#cite_ref-66">^</a></b></span> <span class="reference-text"><a href="#CITEREFAroraBarak2009">Arora & Barak (2009)</a>, Section 6.7. <a href="#CITEREFPapadimitriou1994">Papadimitriou (1994)</a>, Section 15.3.</span>
</li>
<li id="cite_note-67"><span class="mw-cite-backlink"><b><a href="#cite_ref-67">^</a></b></span> <span class="reference-text"><a href="#CITEREFPapadimitriou1994">Papadimitriou (1994)</a>, Section 15.2.</span>
</li>
<li id="cite_note-68"><span class="mw-cite-backlink"><b><a href="#cite_ref-68">^</a></b></span> <span class="reference-text"><a href="#CITEREFLynch1996">Lynch (1996)</a>, p. 17–23.</span>
</li>
<li id="cite_note-69"><span class="mw-cite-backlink"><b><a href="#cite_ref-69">^</a></b></span> <span class="reference-text"><a href="#CITEREFPeleg2000">Peleg (2000)</a>, Sections 2.3 and 7. <a href="#CITEREFLinial1992">Linial (1992)</a>. <a href="#CITEREFNaorStockmeyer1995">Naor & Stockmeyer (1995)</a>.</span>
</li>
<li id="cite_note-SchneiderTrading11-70"><span class="mw-cite-backlink"><b><a href="#cite_ref-SchneiderTrading11_70-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFSchneider,_J.Wattenhofer,_R.2011" class="citation book cs1">Schneider, J.; Wattenhofer, R. (2011). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=dT6nwpXvES4C&pg=PA51">"Trading Bit, Message, and Time Complexity of Distributed Algorithms"</a>. In Peleg, D. (ed.). <i>Distributed Computing</i>. Springer Science & Business Media. pp. <span class="nowrap">51–</span>65. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9783642240997</bdi>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20200801023020/https://books.google.com/books?id=dT6nwpXvES4C&pg=PA51">Archived</a> from the original on 2020-08-01<span class="reference-accessdate">. Retrieved <span class="nowrap">2018-07-20</span></span>.</cite></span>
</li>
<li id="cite_note-71"><span class="mw-cite-backlink"><b><a href="#cite_ref-71">^</a></b></span> <span class="reference-text"><a href="#CITEREFLynch1996">Lynch (1996)</a>, Sections 5–7. <a href="#CITEREFGhosh2007">Ghosh (2007)</a>, Chapter 13.</span>
</li>
<li id="cite_note-72"><span class="mw-cite-backlink"><b><a href="#cite_ref-72">^</a></b></span> <span class="reference-text"><a href="#CITEREFLynch1996">Lynch (1996)</a>, p. 99–102. <a href="#CITEREFGhosh2007">Ghosh (2007)</a>, p. 192–193.</span>
</li>
<li id="cite_note-73"><span class="mw-cite-backlink"><b><a href="#cite_ref-73">^</a></b></span> <span class="reference-text"><a href="#CITEREFDolev2000">Dolev (2000)</a>. <a href="#CITEREFGhosh2007">Ghosh (2007)</a>, Chapter 17.</span>
</li>
<li id="cite_note-74"><span class="mw-cite-backlink"><b><a href="#cite_ref-74">^</a></b></span> <span class="reference-text"><a href="#CITEREFLynch1996">Lynch (1996)</a>, Section 16. <a href="#CITEREFPeleg2000">Peleg (2000)</a>, Section 6.</span>
</li>
<li id="cite_note-75"><span class="mw-cite-backlink"><b><a href="#cite_ref-75">^</a></b></span> <span class="reference-text"><a href="#CITEREFLynch1996">Lynch (1996)</a>, Section 18. <a href="#CITEREFGhosh2007">Ghosh (2007)</a>, Sections 6.2–6.3.</span>
</li>
<li id="cite_note-76"><span class="mw-cite-backlink"><b><a href="#cite_ref-76">^</a></b></span> <span class="reference-text"><a href="#CITEREFGhosh2007">Ghosh (2007)</a>, Section 6.4.</span>
</li>
<li id="cite_note-77"><span class="mw-cite-backlink"><b><a href="#cite_ref-77">^</a></b></span> <span class="reference-text"><cite id="CITEREFKamburugamuveEkanayake2021" class="citation book cs1">Kamburugamuve, Supun; Ekanayake, Saliya (2021). <i>Foundations of Data Intensive Applications Large Scale Data Analytics Under the Hood</i>. John Wiley & Sons. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9781119713012</bdi>.</cite></span>
</li>
<li id="cite_note-HaloiApache15-78"><span class="mw-cite-backlink">^ <a href="#cite_ref-HaloiApache15_78-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-HaloiApache15_78-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFHaloi,_S.2015" class="citation book cs1">Haloi, S. (2015). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=Ym9uBgAAQBAJ&pg=PA100"><i>Apache ZooKeeper Essentials</i></a>. Packt Publishing Ltd. pp. <span class="nowrap">100–</span>101. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9781784398323</bdi>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20230120182456/https://books.google.com/books?id=Ym9uBgAAQBAJ&pg=PA100">Archived</a> from the original on 2023-01-20<span class="reference-accessdate">. Retrieved <span class="nowrap">2018-07-20</span></span>.</cite></span>
</li>
<li id="cite_note-79"><span class="mw-cite-backlink"><b><a href="#cite_ref-79">^</a></b></span> <span class="reference-text"><cite id="CITEREFLeLann1977" class="citation journal cs1">LeLann, G. (1977). "Distributed systems - toward a formal approach". <i>Information Processing</i>. <b>77</b>: 155·160 – via Elsevier.</cite></span>
</li>
<li id="cite_note-80"><span class="mw-cite-backlink"><b><a href="#cite_ref-80">^</a></b></span> <span class="reference-text"><cite id="CITEREFR._G._Gallager,_P._A._Humblet,_and_P._M._Spira1983" class="citation journal cs1"><a href="Robert_G._Gallager" title="Robert G. Gallager">R. G. Gallager</a>, P. A. Humblet, and P. M. Spira (January 1983). <a rel="nofollow" class="external text" href="http://www.apposite-tech.com/blog/wp-content/uploads/2017/09/p66-gallager.pdf">"A Distributed Algorithm for Minimum-Weight Spanning Trees"</a> <span class="cs1-format">(PDF)</span>. <i>ACM Transactions on Programming Languages and Systems</i>. <b>5</b> (1): <span class="nowrap">66–</span>77. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F357195.357200">10.1145/357195.357200</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:2758285">2758285</a>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20170926040957/http://www.apposite-tech.com/blog/wp-content/uploads/2017/09/p66-gallager.pdf">Archived</a> <span class="cs1-format">(PDF)</span> from the original on 2017-09-26.</cite><span class="cs1-maint citation-comment"><code class="cs1-code">{{cite journal}}</code>: CS1 maint: multiple names: authors list (link)</span></span>
</li>
<li id="cite_note-81"><span class="mw-cite-backlink"><b><a href="#cite_ref-81">^</a></b></span> <span class="reference-text"><cite id="CITEREFKorachKuttenMoran1990" class="citation journal cs1">Korach, Ephraim; <a href="Shay_Kutten" title="Shay Kutten">Kutten, Shay</a>; <a href="Shlomo_Moran" title="Shlomo Moran">Moran, Shlomo</a> (1990). <a rel="nofollow" class="external text" href="https://www.cs.technion.ac.il/~moran/r/PS/kkm.pdf">"A Modular Technique for the Design of Efficient Distributed Leader Finding Algorithms"</a> <span class="cs1-format">(PDF)</span>. <i>ACM Transactions on Programming Languages and Systems</i>. <b>12</b> (1): <span class="nowrap">84–</span>101. <a href="CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.139.7342">10.1.1.139.7342</a></span>. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F77606.77610">10.1145/77606.77610</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:9175968">9175968</a>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20070418150944/http://www.cs.technion.ac.il/~moran/r/PS/kkm.pdf">Archived</a> <span class="cs1-format">(PDF)</span> from the original on 2007-04-18.</cite></span>
</li>
<li id="cite_note-82"><span class="mw-cite-backlink"><b><a href="#cite_ref-82">^</a></b></span> <span class="reference-text"><cite id="CITEREFHamilton" class="citation web cs1">Hamilton, Howard. <a rel="nofollow" class="external text" href="http://www2.cs.uregina.ca/~hamilton/courses/330/notes/distributed/distributed.html">"Distributed Algorithms"</a>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20121124002402/http://www2.cs.uregina.ca/~hamilton/courses/330/notes/distributed/distributed.html">Archived</a> from the original on 2012-11-24<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-03-03</span></span>.</cite></span>
</li>
<li id="cite_note-83"><span class="mw-cite-backlink"><b><a href="#cite_ref-83">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://cstheory.stackexchange.com/q/10045">"Major unsolved problems in distributed systems?"</a>. <i>cstheory.stackexchange.com</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20230120182442/https://cstheory.stackexchange.com/questions/10045/major-unsolved-problems-in-distributed-systems">Archived</a> from the original on 20 January 2023<span class="reference-accessdate">. Retrieved <span class="nowrap">16 March</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-84"><span class="mw-cite-backlink"><b><a href="#cite_ref-84">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.theserverside.com/feature/How-big-data-and-distributed-systems-solve-traditional-scalability-problems">"How big data and distributed systems solve traditional scalability problems"</a>. <i>theserverside.com</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20180317232027/http://www.theserverside.com/feature/How-big-data-and-distributed-systems-solve-traditional-scalability-problems">Archived</a> from the original on 17 March 2018<span class="reference-accessdate">. Retrieved <span class="nowrap">16 March</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-SvozilIndet11-85"><span class="mw-cite-backlink"><b><a href="#cite_ref-SvozilIndet11_85-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFSvozil,_K.2011" class="citation book cs1">Svozil, K. (2011). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=ep_FCgAAQBAJ&pg=PA112">"Indeterminism and Randomness Through Physics"</a>. In Hector, Z. (ed.). <i>Randomness Through Computation: Some Answers, More Questions</i>. World Scientific. pp. <span class="nowrap">112–</span>3. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9789814462631</bdi>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20200801024745/https://books.google.com/books?id=ep_FCgAAQBAJ&pg=PA112">Archived</a> from the original on 2020-08-01<span class="reference-accessdate">. Retrieved <span class="nowrap">2018-07-20</span></span>.</cite></span>
</li>
<li id="cite_note-86"><span class="mw-cite-backlink"><b><a href="#cite_ref-86">^</a></b></span> <span class="reference-text"><a href="#CITEREFPapadimitriou1994">Papadimitriou (1994)</a>, Section 19.3.</span>
</li>
</ol></div>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239549316">
/* start https://en.wikipedia.org/ */
.mw-parser-output .refbegin{margin-bottom:0.5em}.mw-parser-output .refbegin-hanging-indents>ul{margin-left:0}.mw-parser-output .refbegin-hanging-indents>ul>li{margin-left:0;padding-left:3.2em;text-indent:-3.2em}.mw-parser-output .refbegin-hanging-indents ul,.mw-parser-output .refbegin-hanging-indents ul li{list-style:none}@media(max-width:720px){.mw-parser-output .refbegin-hanging-indents>ul>li{padding-left:1.6em;text-indent:-1.6em}}.mw-parser-output .refbegin-columns{margin-top:0.3em}.mw-parser-output .refbegin-columns ul{margin-top:0}.mw-parser-output .refbegin-columns li{page-break-inside:avoid;break-inside:avoid-column}@media screen{.mw-parser-output .refbegin{font-size:90%}}
/* end https://en.wikipedia.org/ */
</style><div class="refbegin refbegin-columns references-column-width" style="column-width: 30em">
<dl><dt>Books</dt></dl>
<ul><li><cite id="CITEREFAndrews2000" class="citation cs2">Andrews, Gregory R. (2000), <span class="id-lock-registration" title="Free registration required"><a rel="nofollow" class="external text" href="https://archive.org/details/foundationsofmul0000andr"><i>Foundations of Multithreaded, Parallel, and Distributed Programming</i></a></span>, <a href="Addison%E2%80%93Wesley" class="mw-redirect" title="Addison–Wesley">Addison–Wesley</a>, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-201-35752-3</bdi></cite>.</li>
<li><cite id="CITEREFAroraBarak2009" class="citation cs2"><a href="Sanjeev_Arora" title="Sanjeev Arora">Arora, Sanjeev</a>; Barak, Boaz (2009), <i>Computational Complexity – A Modern Approach</i>, <a href="Cambridge_University_Press" title="Cambridge University Press">Cambridge</a>, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-521-42426-4</bdi></cite>.</li>
<li><cite id="CITEREFCormenLeisersonRivest1990" class="citation cs2"><a href="Thomas_H._Cormen" title="Thomas H. Cormen">Cormen, Thomas H.</a>; <a href="Charles_E._Leiserson" title="Charles E. Leiserson">Leiserson, Charles E.</a>; <a href="Ron_Rivest" title="Ron Rivest">Rivest, Ronald L.</a> (1990), <a href="Introduction_to_Algorithms" title="Introduction to Algorithms"><i>Introduction to Algorithms</i></a> (1st ed.), <a href="MIT_Press" title="MIT Press">MIT Press</a>, <a href="Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/1990ita..book.....C">1990ita..book.....C</a>, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-262-03141-7</bdi></cite>.</li>
<li><cite id="CITEREFDolev2000" class="citation cs2"><a href="Shlomi_Dolev" title="Shlomi Dolev">Dolev, Shlomi</a> (2000), <i>Self-Stabilization</i>, <a href="MIT_Press" title="MIT Press">MIT Press</a>, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-262-04178-2</bdi></cite>.</li>
<li><cite id="CITEREFElmasriNavathe2000" class="citation cs2">Elmasri, Ramez; <a href="Shamkant_Navathe" title="Shamkant Navathe">Navathe, Shamkant B.</a> (2000), <i>Fundamentals of Database Systems</i> (3rd ed.), <a href="Addison%E2%80%93Wesley" class="mw-redirect" title="Addison–Wesley">Addison–Wesley</a>, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-201-54263-9</bdi></cite>.</li>
<li><cite id="CITEREFGhosh2007" class="citation cs2">Ghosh, Sukumar (2007), <i>Distributed Systems – An Algorithmic Approach</i>, Chapman & Hall/CRC, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-58488-564-1</bdi></cite>.</li>
<li><cite id="CITEREFLynch1996" class="citation cs2"><a href="Nancy_Lynch" title="Nancy Lynch">Lynch, Nancy A.</a> (1996), <span class="id-lock-registration" title="Free registration required"><a rel="nofollow" class="external text" href="https://archive.org/details/distributedalgor0000lync"><i>Distributed Algorithms</i></a></span>, <a href="Morgan_Kaufmann" class="mw-redirect" title="Morgan Kaufmann">Morgan Kaufmann</a>, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-55860-348-6</bdi></cite>.</li>
<li><cite id="CITEREFHerlihyShavit2008" class="citation cs2"><a href="Maurice_Herlihy" title="Maurice Herlihy">Herlihy, Maurice P.</a>; <a href="Nir_Shavit" title="Nir Shavit">Shavit, Nir N.</a> (2008), <i>The Art of Multiprocessor Programming</i>, <a href="Morgan_Kaufmann" class="mw-redirect" title="Morgan Kaufmann">Morgan Kaufmann</a>, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-12-370591-4</bdi></cite>.</li>
<li><cite id="CITEREFPapadimitriou1994" class="citation cs2"><a href="Christos_Papadimitriou" title="Christos Papadimitriou">Papadimitriou, Christos H.</a> (1994), <i>Computational Complexity</i>, <a href="Addison%E2%80%93Wesley" class="mw-redirect" title="Addison–Wesley">Addison–Wesley</a>, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-201-53082-7</bdi></cite>.</li>
<li><cite id="CITEREFPeleg2000" class="citation cs2"><a href="David_Peleg_(scientist)" class="mw-redirect" title="David Peleg (scientist)">Peleg, David</a> (2000), <a rel="nofollow" class="external text" href="https://web.archive.org/web/20090806070332/http://www.ec-securehost.com/SIAM/DT05.html"><i>Distributed Computing: A Locality-Sensitive Approach</i></a>, <a href="SIAM" class="mw-redirect" title="SIAM">SIAM</a>, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-89871-464-7</bdi>, archived from <a rel="nofollow" class="external text" href="http://www.ec-securehost.com/SIAM/DT05.html">the original</a> on 2009-08-06<span class="reference-accessdate">, retrieved <span class="nowrap">2009-07-16</span></span></cite>.</li></ul>
<dl><dt>Articles</dt></dl>
<ul><li><cite id="CITEREFColeVishkin1986" class="citation cs2">Cole, Richard; <a href="Uzi_Vishkin" title="Uzi Vishkin">Vishkin, Uzi</a> (1986), "Deterministic coin tossing with applications to optimal parallel list ranking", <i>Information and Control</i>, <b>70</b> (1): <span class="nowrap">32–</span>53, <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1016%2FS0019-9958%2886%2980023-7">10.1016/S0019-9958(86)80023-7</a></span></cite>.</li>
<li><cite id="CITEREFKeidar2008" class="citation cs2"><a href="Idit_Keidar" title="Idit Keidar">Keidar, Idit</a> (2008), <a rel="nofollow" class="external text" href="https://web.archive.org/web/20140116123634/http://webee.technion.ac.il/~idish/sigactNews/#column%2032">"Distributed computing column 32 – The year in review"</a>, <i><a href="ACM_SIGACT_News" class="mw-redirect" title="ACM SIGACT News">ACM SIGACT News</a></i>, <b>39</b> (4): <span class="nowrap">53–</span>54, <a href="CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.116.1285">10.1.1.116.1285</a></span>, <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F1466390.1466402">10.1145/1466390.1466402</a>, <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:7607391">7607391</a>, archived from <a rel="nofollow" class="external text" href="http://webee.technion.ac.il/~idish/sigactNews/#column%2032">the original</a> on 2014-01-16<span class="reference-accessdate">, retrieved <span class="nowrap">2009-08-20</span></span></cite>.</li>
<li><cite id="CITEREFLinial1992" class="citation cs2"><a href="Nati_Linial" title="Nati Linial">Linial, Nathan</a> (1992), "Locality in distributed graph algorithms", <i>SIAM Journal on Computing</i>, <b>21</b> (1): <span class="nowrap">193–</span>201, <a href="CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.471.6378">10.1.1.471.6378</a></span>, <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1137%2F0221015">10.1137/0221015</a></cite>.</li>
<li><cite id="CITEREFNaorStockmeyer1995" class="citation cs2"><a href="Moni_Naor" title="Moni Naor">Naor, Moni</a>; <a href="Larry_Stockmeyer" title="Larry Stockmeyer">Stockmeyer, Larry</a> (1995), <a rel="nofollow" class="external text" href="http://www.wisdom.weizmann.ac.il/~naor/PAPERS/lcl.pdf">"What can be computed locally?"</a> <span class="cs1-format">(PDF)</span>, <i>SIAM Journal on Computing</i>, <b>24</b> (6): <span class="nowrap">1259–</span>1277, <a href="CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.29.669">10.1.1.29.669</a></span>, <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1137%2FS0097539793254571">10.1137/S0097539793254571</a>, <a rel="nofollow" class="external text" href="https://web.archive.org/web/20130108030723/http://www.wisdom.weizmann.ac.il/~naor/PAPERS/lcl.pdf">archived</a> <span class="cs1-format">(PDF)</span> from the original on 2013-01-08</cite>.</li></ul>
<dl><dt>Web sites</dt></dl>
<ul><li><cite id="CITEREFGodfrey2002" class="citation web cs1">Godfrey, Bill (2002). <a rel="nofollow" class="external text" href="https://billpg.com/bacchae-co-uk/docs/dist.html">"A primer on distributed computing"</a>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20210513163858/https://billpg.com/bacchae-co-uk/docs/dist.html">Archived</a> from the original on 2021-05-13<span class="reference-accessdate">. Retrieved <span class="nowrap">2021-05-13</span></span>.</cite></li>
<li><cite id="CITEREFPeter2004" class="citation web cs1">Peter, Ian (2004). <a rel="nofollow" class="external text" href="http://www.nethistory.info/History%20of%20the%20Internet/">"Ian Peter's History of the Internet"</a>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20100120220410/http://www.nethistory.info/History%20of%20the%20Internet/">Archived</a> from the original on 2010-01-20<span class="reference-accessdate">. Retrieved <span class="nowrap">2009-08-04</span></span>.</cite></li></ul>
</div>
<div class="mw-heading mw-heading2"><h2 id="Further_reading">Further reading</h2></div>
<div class="refbegin refbegin-columns references-column-width" style="column-width: 30em">
<dl><dt>Books</dt></dl>
<ul><li><cite id="CITEREFAttiya,_Hagit_and_Jennifer_Welch2004" class="citation cs2"><a href="Hagit_Attiya" title="Hagit Attiya">Attiya, Hagit</a> and Jennifer Welch (2004), <i>Distributed Computing: Fundamentals, Simulations, and Advanced Topics</i>, Wiley-Interscience</cite> <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-471-45324-2</bdi>.</li>
<li><cite id="CITEREFChristian_CachinRachid_GuerraouiLuís_Rodrigues2011" class="citation cs2">Christian Cachin; Rachid Guerraoui; Luís Rodrigues (2011), <i>Introduction to Reliable and Secure Distributed Programming</i> (2. ed.), Springer, <a href="Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/2011itra.book.....C">2011itra.book.....C</a>, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-3-642-15259-7</bdi></cite></li>
<li><cite id="CITEREFCoulouris,_George2011" class="citation cs2">Coulouris, George; et al. (2011), <i>Distributed Systems: Concepts and Design (5th Edition)</i>, Addison-Wesley</cite> <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-132-14301-1</bdi>.</li>
<li><cite id="CITEREFFaber1998" class="citation cs2">Faber, Jim (1998), <a rel="nofollow" class="external text" href="http://docstore.mik.ua/orelly/java-ent/dist/index.htm"><i>Java Distributed Computing</i></a>, O'Reilly, <a rel="nofollow" class="external text" href="https://web.archive.org/web/20100824170917/http://docstore.mik.ua/orelly/java-ent/dist/index.htm">archived</a> from the original on 2010-08-24<span class="reference-accessdate">, retrieved <span class="nowrap">2010-09-29</span></span></cite>: <a rel="nofollow" class="external text" href="http://docstore.mik.ua/orelly/java-ent/dist/index.htm">Java Distributed Computing by Jim Faber, 1998</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20100824170917/http://docstore.mik.ua/orelly/java-ent/dist/index.htm">Archived</a> 2010-08-24 at the <a href="Wayback_Machine" title="Wayback Machine">Wayback Machine</a></li>
<li><cite id="CITEREFGarg,_Vijay_K.2002" class="citation cs2">Garg, Vijay K. (2002), <i>Elements of Distributed Computing</i>, Wiley-IEEE Press</cite> <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0-471-03600-5</bdi>.</li>
<li><cite id="CITEREFTel1994" class="citation cs2">Tel, Gerard (1994), <i>Introduction to Distributed Algorithms</i>, Cambridge University Press</cite></li>
<li><cite id="CITEREFChandy,_Mani1988" class="citation cs2"><a href="K._Mani_Chandy" title="K. Mani Chandy">Chandy, Mani</a>; et al. (1988), <i>Parallel Program Design</i>, Addison-Wesley</cite> <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>0201058669</bdi></li>
<li><cite id="CITEREFDusseauDusseau2016" class="citation book cs1">Dusseau, Remzi H.; Dusseau, Andrea (2016). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20210831013525/https://pages.cs.wisc.edu/~remzi/OSTEP/dist-intro.pdf"><i>Operating Systems: Three Easy Pieces, Chapter 48 Distributed Systems</i></a> <span class="cs1-format">(PDF)</span>. Archived from <a rel="nofollow" class="external text" href="https://pages.cs.wisc.edu/~remzi/OSTEP/dist-intro.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 31 August 2021<span class="reference-accessdate">. Retrieved <span class="nowrap">8 October</span> 2021</span>.</cite></li></ul>
<dl><dt>Articles</dt></dl>
<ul><li><cite id="CITEREFKeidarRajsbaum2000–2009" class="citation cs2">Keidar, Idit; Rajsbaum, Sergio, eds. (2000–2009), <a rel="nofollow" class="external text" href="https://web.archive.org/web/20140116123634/http://webee.technion.ac.il/~idish/sigactNews/">"Distributed computing column"</a>, <a href="ACM_SIGACT_News" class="mw-redirect" title="ACM SIGACT News"><i>ACM SIGACT News</i></a>, archived from <a rel="nofollow" class="external text" href="http://webee.technion.ac.il/~idish/sigactNews/">the original</a> on 2014-01-16<span class="reference-accessdate">, retrieved <span class="nowrap">2009-08-16</span></span></cite>.</li>
<li><cite id="CITEREFBirrellLevinSchroederNeedham1982" class="citation journal cs1">Birrell, A. D.; Levin, R.; Schroeder, M. D.; <a href="Roger_M._Needham" class="mw-redirect" title="Roger M. Needham">Needham, R. M.</a> (April 1982). <a rel="nofollow" class="external text" href="http://web.cs.wpi.edu/~cs4513/d07/Papers/Birrell,%20Levin,%20et.%20al.,%20Grapevine.pdf">"Grapevine: An exercise in distributed computing"</a> <span class="cs1-format">(PDF)</span>. <i><a href="Communications_of_the_ACM" title="Communications of the ACM">Communications of the ACM</a></i>. <b>25</b> (4): <span class="nowrap">260–</span>274. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F358468.358487">10.1145/358468.358487</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:16066616">16066616</a>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160730064812/http://web.cs.wpi.edu/~cs4513/d07/Papers/Birrell,%20Levin,%20et.%20al.,%20Grapevine.pdf">Archived</a> <span class="cs1-format">(PDF)</span> from the original on 2016-07-30.</cite></li></ul>
<dl><dt>Conference Papers</dt></dl>
<ul><li><cite id="CITEREFRodriguezVillagraBaran2007" class="citation book cs1">Rodriguez, Carlos; Villagra, Marcos; Baran, Benjamin (2007). "Asynchronous team algorithms for Boolean Satisfiability". <i>2007 2nd Bio-Inspired Models of Network, Information and Computing Systems</i>. pp. <span class="nowrap">66–</span>69. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FBIMNICS.2007.4610083">10.1109/BIMNICS.2007.4610083</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:15185219">15185219</a>.</cite></li></ul>
</div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1290876196">
/* start https://en.wikipedia.org/ */
.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:var(--background-color-interactive-subtle,#f8f9fa);display:flow-root}.mw-parser-output .infobox .side-box{font-size:100%}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1;min-width:0}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1237033735">
/* start https://en.wikipedia.org/ */
@media print{body.ns-0 .mw-parser-output .sistersitebox{display:none!important}}@media screen{html.skin-theme-clientpref-night .mw-parser-output .sistersitebox img[src*="Wiktionary-logo-en-v2.svg"]{background-color:white}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .sistersitebox img[src*="Wiktionary-logo-en-v2.svg"]{background-color:white}}
/* end https://en.wikipedia.org/ */
</style><div class="side-box side-box-right sistersitebox"><style data-mw-deduplicate="TemplateStyles:r1126788409">
/* start https://en.wikipedia.org/ */
.mw-parser-output .plainlist ol,.mw-parser-output .plainlist ul{line-height:inherit;list-style:none;margin:0;padding:0}.mw-parser-output .plainlist ol li,.mw-parser-output .plainlist ul li{margin-bottom:0}
/* end https://en.wikipedia.org/ */
</style>
<div class="side-box-flex">
<div class="side-box-image"><span class="noviewer" typeof="mw:File"></span></div>
<div class="side-box-text plainlist">Wikiquote has quotations related to <i><b><a href="https://en.wikiquote.org/wiki/Special:Search/Distributed_computing" class="extiw external" title="q:Special:Search/Distributed computing">Distributed computing</a></b></i>.</div></div>
</div>
<ul><li><span class="noviewer" typeof="mw:File"></span> Media related to <a href="https://commons.wikimedia.org/wiki/Category:Distributed_computing" class="extiw external" title="commons:Category:Distributed computing">Distributed computing</a> at Wikimedia Commons</li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Parallel_computing346" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div id="Parallel_computing346" style="font-size:114%;margin:0 4em"><a href="Parallel_computing" title="Parallel computing">Parallel computing</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">General</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul>
<li><a href="Parallel_computing" title="Parallel computing">Parallel computing</a></li>
<li><a href="Parallel_algorithm" title="Parallel algorithm">Parallel algorithm</a></li>
<li><a href="Massively_parallel" title="Massively parallel">Massively parallel</a></li>
<li><a href="Cloud_computing" title="Cloud computing">Cloud computing</a></li>
<li><a href="High-performance_computing" title="High-performance computing">High-performance computing</a></li>
<li><a href="Multiprocessing" title="Multiprocessing">Multiprocessing</a></li>
<li><a href="Manycore_processor" title="Manycore processor">Manycore processor</a></li>
<li>GPGPU software</li>
<li><a href="Computer_network" title="Computer network">Computer network</a></li>
<li><a href="Systolic_array" title="Systolic array">Systolic array</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Levels</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Bit-level_parallelism" title="Bit-level parallelism">Bit</a></li>
<li><a href="Instruction-level_parallelism" title="Instruction-level parallelism">Instruction</a></li>
<li><a href="Task_parallelism" title="Task parallelism">Thread</a></li>
<li><a href="Task_parallelism" title="Task parallelism">Task</a></li>
<li><a href="Data_parallelism" title="Data parallelism">Data</a></li>
<li><a href="Memory-level_parallelism" title="Memory-level parallelism">Memory</a></li>
<li><a href="Loop-level_parallelism" title="Loop-level parallelism">Loop</a></li>
<li><a href="Pipeline_(computing)" title="Pipeline (computing)">Pipeline</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Multithreading_(computer_architecture)" title="Multithreading (computer architecture)">Multithreading</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Temporal_multithreading" title="Temporal multithreading">Temporal</a></li>
<li><a href="Simultaneous_multithreading" title="Simultaneous multithreading">Simultaneous</a> (SMT)</li>
<li><a href="Simultaneous_and_heterogeneous_multithreading" title="Simultaneous and heterogeneous multithreading">Simultaneous and heterogenous</a></li>
<li><a href="Speculative_multithreading" title="Speculative multithreading">Speculative</a> (SpMT)</li>
<li><a href="Preemption_(computing)" title="Preemption (computing)">Preemptive</a></li>
<li><a href="Computer_multitasking#Cooperative_multitasking" title="Computer multitasking">Cooperative</a></li>
<li><a href="Bulldozer_(microarchitecture)#Bulldozer_core" title="Bulldozer (microarchitecture)">Clustered multi-thread</a> (CMT)</li>
<li><a href="Hardware_scout" title="Hardware scout">Hardware scout</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Theory</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Parallel_RAM" title="Parallel RAM">PRAM model</a></li>
<li><a href="Parallel_external_memory" title="Parallel external memory">PEM model</a></li>
<li><a href="Analysis_of_parallel_algorithms" title="Analysis of parallel algorithms">Analysis of parallel algorithms</a></li>
<li><a href="Amdahl's_law" title="Amdahl's law">Amdahl's law</a></li>
<li><a href="Gustafson's_law" title="Gustafson's law">Gustafson's law</a></li>
<li><a href="Cost_efficiency" title="Cost efficiency">Cost efficiency</a></li>
<li><a href="Karp%E2%80%93Flatt_metric" title="Karp–Flatt metric">Karp–Flatt metric</a></li>
<li><a href="Parallel_slowdown" title="Parallel slowdown">Slowdown</a></li>
<li><a href="Speedup" title="Speedup">Speedup</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Elements</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Process_(computing)" title="Process (computing)">Process</a></li>
<li><a href="Thread_(computing)" title="Thread (computing)">Thread</a></li>
<li><a href="Fiber_(computer_science)" title="Fiber (computer science)">Fiber</a></li>
<li><a href="Instruction_window" title="Instruction window">Instruction window</a></li>
<li><a href="Array_(data_structure)" title="Array (data structure)">Array</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Coordination</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Multiprocessing" title="Multiprocessing">Multiprocessing</a></li>
<li><a href="Memory_coherence" title="Memory coherence">Memory coherence</a></li>
<li><a href="Cache_coherence" title="Cache coherence">Cache coherence</a></li>
<li><a href="Cache_invalidation" title="Cache invalidation">Cache invalidation</a></li>
<li><a href="Barrier_(computer_science)" title="Barrier (computer science)">Barrier</a></li>
<li><a href="Synchronization_(computer_science)" title="Synchronization (computer science)">Synchronization</a></li>
<li><a href="Application_checkpointing" title="Application checkpointing">Application checkpointing</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Computer_programming" title="Computer programming">Programming</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Stream_processing" title="Stream processing">Stream processing</a></li>
<li><a href="Dataflow_programming" title="Dataflow programming">Dataflow programming</a></li>
<li><a href="Parallel_programming_model" title="Parallel programming model">Models</a>
<ul><li><a href="Implicit_parallelism" title="Implicit parallelism">Implicit parallelism</a></li>
<li><a href="Explicit_parallelism" title="Explicit parallelism">Explicit parallelism</a></li>
<li><a href="Concurrency_(computer_science)" title="Concurrency (computer science)">Concurrency</a></li></ul></li>
<li><a href="Non-blocking_algorithm" title="Non-blocking algorithm">Non-blocking algorithm</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Computer_hardware" title="Computer hardware">Hardware</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Flynn's_taxonomy" title="Flynn's taxonomy">Flynn's taxonomy</a>
<ul><li><a href="Single_instruction%2C_single_data" title="Single instruction, single data">SISD</a></li>
<li><a href="Single_instruction%2C_multiple_data" title="Single instruction, multiple data">SIMD</a>
<ul><li><a href="Single_instruction%2C_multiple_threads" title="Single instruction, multiple threads">Array processing</a> (SIMT)</li>
<li><a href="Flynn's_taxonomy#Pipelined_processor" title="Flynn's taxonomy">Pipelined processing</a></li>
<li><a href="Flynn's_taxonomy#Associative_processor" title="Flynn's taxonomy">Associative processing</a></li></ul></li>
<li><a href="Multiple_instruction%2C_single_data" title="Multiple instruction, single data">MISD</a></li>
<li><a href="Multiple_instruction%2C_multiple_data" title="Multiple instruction, multiple data">MIMD</a></li></ul></li>
<li><a href="Dataflow_architecture" title="Dataflow architecture">Dataflow architecture</a></li>
<li>GPGPU hardware</li>
<li><a href="Instruction_pipelining" title="Instruction pipelining">Pipelined processor</a></li>
<li><a href="Superscalar_processor" title="Superscalar processor">Superscalar processor</a></li>
<li><a href="Vector_processor" title="Vector processor">Vector processor</a></li>
<li><a href="Multiprocessing" title="Multiprocessing">Multiprocessor</a>
<ul><li><a href="Symmetric_multiprocessing" title="Symmetric multiprocessing">symmetric</a></li>
<li><a href="Asymmetric_multiprocessing" title="Asymmetric multiprocessing">asymmetric</a></li></ul></li>
<li><a href="Semiconductor_memory" title="Semiconductor memory">Memory</a>
<ul><li><a href="Shared_memory" title="Shared memory">shared</a></li>
<li><a href="Distributed_memory" title="Distributed memory">distributed</a></li>
<li><a href="Distributed_shared_memory" title="Distributed shared memory">distributed shared</a></li>
<li><a href="Uniform_memory_access" title="Uniform memory access">UMA</a></li>
<li><a href="Non-uniform_memory_access" title="Non-uniform memory access">NUMA</a></li>
<li><a href="Cache-only_memory_architecture" title="Cache-only memory architecture">COMA</a></li></ul></li>
<li><a href="Massively_parallel" title="Massively parallel">Massively parallel</a> computer</li>
<li><a href="Computer_cluster" title="Computer cluster">Computer cluster</a>
<ul><li><a href="Beowulf_cluster" title="Beowulf cluster">Beowulf cluster</a></li></ul></li>
<li><a href="Grid_computing" title="Grid computing">Grid computer</a></li>
<li><a href="Hardware_acceleration" title="Hardware acceleration">Hardware acceleration</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="API" title="API">APIs</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Ateji_PX" title="Ateji PX">Ateji PX</a></li>
<li><a href="Boost_(C%2B%2B_libraries)" title="Boost (C++ libraries)">Boost</a></li>
<li><a href="Chapel_(programming_language)" title="Chapel (programming language)">Chapel</a></li>
<li><a href="HPX" title="HPX">HPX</a></li>
<li><a href="Charm%2B%2B" title="Charm++">Charm++</a></li>
<li><a href="Cilk" title="Cilk">Cilk</a></li>
<li><a href="Coarray_Fortran" title="Coarray Fortran">Coarray Fortran</a></li>
<li><a href="CUDA" title="CUDA">CUDA</a></li>
<li><a href="Dryad_(programming)" title="Dryad (programming)">Dryad</a></li>
<li><a href="C%2B%2B_AMP" title="C++ AMP">C++ AMP</a></li>
<li><a href="Global_Arrays" title="Global Arrays">Global Arrays</a></li>
<li><a href="GPUOpen" title="GPUOpen">GPUOpen</a></li>
<li><a href="Message_Passing_Interface" title="Message Passing Interface">MPI</a></li>
<li><a href="OpenMP" title="OpenMP">OpenMP</a></li>
<li><a href="OpenCL" title="OpenCL">OpenCL</a></li>
<li><a href="OpenHMPP" title="OpenHMPP">OpenHMPP</a></li>
<li><a href="OpenACC" title="OpenACC">OpenACC</a></li>
<li><a href="Parallel_Extensions" title="Parallel Extensions">Parallel Extensions</a></li>
<li><a href="Parallel_Virtual_Machine" title="Parallel Virtual Machine">PVM</a></li>
<li><a href="Pthreads" title="Pthreads">pthreads</a></li>
<li><a href="RaftLib" title="RaftLib">RaftLib</a></li>
<li><a href="ROCm" title="ROCm">ROCm</a></li>
<li><a href="Unified_Parallel_C" title="Unified Parallel C">UPC</a></li>
<li><a href="Threading_Building_Blocks" title="Threading Building Blocks">TBB</a></li>
<li><a href="ZPL_(programming_language)" class="mw-redirect" title="ZPL (programming language)">ZPL</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Problems</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Automatic_parallelization" title="Automatic parallelization">Automatic parallelization</a></li>
<li><a href="Deadlock_(computer_science)" title="Deadlock (computer science)">Deadlock</a></li>
<li><a href="Deterministic_algorithm" title="Deterministic algorithm">Deterministic algorithm</a></li>
<li><a href="Embarrassingly_parallel" title="Embarrassingly parallel">Embarrassingly parallel</a></li>
<li><a href="Parallel_slowdown" title="Parallel slowdown">Parallel slowdown</a></li>
<li><a href="Race_condition" title="Race condition">Race condition</a></li>
<li><a href="Software_lockout" title="Software lockout">Software lockout</a></li>
<li><a href="Scalability" title="Scalability">Scalability</a></li>
<li><a href="Starvation_(computer_science)" title="Starvation (computer science)">Starvation</a></li></ul>
</div></td></tr><tr><td class="navbox-abovebelow" colspan="2"><div>
<ul><li><span class="noviewer" typeof="mw:File"><span title="Category"></span></span> Category: Parallel computing</li></ul>
</div></td></tr></tbody></table></div>
<div class="navbox-styles"></div><div role="navigation" class="navbox authority-control" aria-labelledby="Authority_control_databases_frameless&#124;text-top&#124;10px&#124;alt=Edit_this_at_Wikidata&#124;link=https&#58;//www.wikidata.org/wiki/Q180634#identifiers&#124;class=noprint&#124;Edit_this_at_Wikidata1277" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Authority_control_databases_frameless&#124;text-top&#124;10px&#124;alt=Edit_this_at_Wikidata&#124;link=https&#58;//www.wikidata.org/wiki/Q180634#identifiers&#124;class=noprint&#124;Edit_this_at_Wikidata1277" style="font-size:114%;margin:0 4em">Authority control databases </div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">International</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://id.worldcat.org/fast/906987">FAST</a></span></li></ul></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">National</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"><ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://d-nb.info/gnd/7545389-7">Germany</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://id.loc.gov/authorities/sh85042293">United States</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://catalogue.bnf.fr/ark:/12148/cb11932111w">France</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://data.bnf.fr/ark:/12148/cb11932111w">BnF data</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://datos.bne.es/resource/XX545920">Spain</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://kopkatalogs.lv/F?func=direct&local_base=lnc10&doc_number=000115923&P_CON_LNG=ENG">Latvia</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://www.nli.org.il/en/authorities/987007538304905171">Israel</a></span></li></ul></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Other</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://www.idref.fr/027234908">IdRef</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://lux.collections.yale.edu/view/concept/08f8e345-e0c7-4df6-a5a2-394e8a317dbc">Yale LUX</a></span></li></ul></div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-07-24" href="https://en.wikipedia.org/wiki/?title=Distributed_computing&oldid=1302287877">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>